我正在尝试使用一个非常基本的命令将文件从本地系统上的虚拟机(Ubuntu 18.04)移动到远程服务器scp
。此问题仅出现在一台特定服务器上,其他服务器运行正常,因此这不是普遍现象。
scp <file name> <user>@<complete_hostname>:~/
但是这个命令不会在身份验证成功之后继续进行。
当我使用 FileZilla 时也发生同样的情况。
IT 团队建议我使用效果很好的“WinSCP”。
scp 调试日志
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/username/.ssh/id_dsa
debug1: Trying private key: /home/username/.ssh/id_ecdsa
debug1: Next authentication method: password
'user'@'full hostname's password:
debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = C
debug1: Sending env LC_ALL = C
debug1: Sending command: scp -v -t ~/
此后没有任何进展,FileZilla 以类似的方式在 20 秒后超时。而 WinSCP 运行良好。
什么会导致scp
挂起,因为我在某些脚本中使用它,某个特定服务器的这个问题导致我的脚本无法在它们上使用,这也适用于 SFTP 方法。
IT 团队建议我不要使用这些标志-d
,-t
因为在发出命令时,这些标志会显示在调试日志中,并且不受远程服务器支持。这些可以删除吗?我没有使用命令明确发出它们。
编辑2:
SCP Log: (from local machine, Ubuntu 18.04)
==========
debug1: Next authentication method: publickey
debug1: Offering public key:
RSA SHA256:<key> /home/username/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to 'HOSTNAME' ([10.6.26.145]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LANG = en_IN
debug1: Sending command: scp -v -r -d -t ~/received/
答案1
IT 团队建议我不要使用这些标志
-d
,-t
因为在发出命令时,这些标志会显示在调试日志中,并且不受远程服务器支持。这些可以删除吗?我没有使用命令明确发出它们。
-t
- 这完全是胡说八道。如果没有该-t
标志,SCP 协议就无法工作。请参阅SCP(安全复制协议)文件传输如何工作?
-d
- 当您指定多个源时使用它。它向服务器指示“目标应该是目录”。
在这两种情况下,我都怀疑服务器不支持其中任何一个。由于它是 Ubuntu,因此它 99.9% 肯定正在运行 OpenSSH。而且 OpenSSH 自存在以来就支持这些标志。请参阅scp.c
自 1999 年起。
我很确定你得到的建议是一派胡言。“IT 团队”可能只是没有在scp
手册页中找到这些开关,并找到了一种真正帮助您的简单方法。但这些标志是用于scp
作为“客户端”和scp
“服务器”进行通信的内部标志。它们没有按目的记录下来。
此外,FileZilla 甚至不支持 SCP 协议。 唯一导致上述问题的是 - 您的问题与任何“scp
旗帜”。
答案2
原来是防火墙阻止了传输。原因是我的默认 shell 上的文件权限.*rc文件。.cshrc在这种情况下。
我的默认 shell 是 csh,文件权限是
-rwxr-s---
将这些更改为
-rw-r-----
解决了这个问题。
感谢大家的帮助。