动机是有一个我可以ssh
进入的服务器(设置或不设置密钥对......即,没有或有密码),但我无法通过rsync
、scp
或发送文件sftp
。有人提到我应该检查 ssh 和文件传输协议是否使用相同的端口,但我不知道如何检查。
如果您对我如何上班有任何其他想法rsync
,我也将不胜感激。
当我跑步时rsync -avvvvvPt ./ [USER]@[REMOTE]:.
我得到:
FILE_STRUCT_LEN=24, EXTRA_LEN=4
cmd=<NULL> machine=[REMOTE] user=[USER] path=.
cmd[0]=ssh cmd[1]=-l cmd[2]=[USER] cmd[3]=[REMOTE] cmd[4]=rsync cmd[5]=--server cmd[6]=-vvvvvlogDtpre.iLsfx cmd[7]=--partial cmd[8]=. cmd[9]=.
opening connection using: ssh -l [USER] [REMOTE] rsync --server -vvvvvlogDtpre.iLsfx --partial . . (10 args)
msg checking charset: UTF-8
然后它挂起直到ctrl-c
.
答案1
两台服务器需要具有相同的 ssh 端口。
如果一台服务器上的端口是 22,而另一台服务器上的端口是 44,那么 scp 将无法工作。
答案2
就我而言,它是ForceCommand
在远程服务器的 sshd 配置文件中设置的指令/etc/ssh/sshd_config
。注释掉并重新加载服务器后,它开始正常工作。
答案3
如果它们按照 agrek 的要求全部可用,那么您可以检查端口的 .plist 文件:
打开终端提示符并运行cat /System/Library/LaunchDaemons/ssh.plist
.
向下滚动一点,您应该会看到:
<key>Listeners</key> <dict> <key>SockServiceName</key> <string>ssh</string> <key>Bonjour</key> <array> <string>ssh</string> <string>sftp-ssh</string> </array> </dict>
以下<string>...<string>
是<Key> SockServiceName </key>
您所追求的。如果文本是像上面那样的 ssh,则它使用标准端口,即端口 22。如果它是数字,则该数字就是端口。
Rsync over ssh 使用与通过 ssh 隧道发送数据相同的端口,iirc sftp 和 scp 使用 ssh 隧道,因此它们的端口与 ssh 相同。
资料来源: https://serverfault.com/questions/18761/how-to-change-sshd-port-on-mac-os-x
答案4
阅读有关 iconv 标志的更多信息以及问题的添加信息后得到新答案。
根据他们的常见问题解答:http://rsync.samba.org/FAQ.html
您可以通过向 rsync 传递适当的 --iconv 选项来避免字符集问题,该选项告诉它源文件是什么字符集,以及目标文件存储在什么字符集中。例如,上面的 Mac OS X 问题将可以使用 --iconv=UTF-8,UTF8-MAC 来处理(UTF8-MAC 是 Mac OS X iconv 识别的伪字符集,其中所有字符都被分解)。
因此,您需要找出源的字符集是什么以及目标计算机上的操作系统使用的字符集。
快速说明:@stefan 关于文件很大并且计算需要时间的说法也可能是正确的,但这与哈希生成有关,而不是与字符集有关,因此对此无关紧要。