因此,我尝试使用 .ssh 将文件从通过 SSH 连接的远程主机下载到我的 Mac 上的本地文件夹rsync
。我使用的命令是:
$ rsync --progress -avz -e "ssh [email protected] -i ~/.ssh/keyFile" [email protected]:/path/to/files/ ~/Downloads/
这是提示的内容:
[email protected]'s password: [I typed the password here]
bash: 1.2.3.4: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.3]
1.2.3.4
远程主机地址被解释为命令似乎很奇怪?!我不确定这是如何以及为何发生的。如何更新命令以达到预期结果并开始复制文件?
答案1
我很确定您不想在 -e 标志中包含 ssh 命令的 user@host 部分。尝试
rsync --progress -avz -e "ssh -i ~/.ssh/keyFile" [email protected]:/path/to/files/ ~/Downloads/
答案2
该命令与 中的(或) 选项ssh
一起使用时,不需要通过名称提及远程主机,因为这是源规范的一部分(在您的命令中)。-e
--rsh
rsync
在你的情况下,使用就足够了
rsync --progress -avz -e "ssh -i ~/.ssh/keyFile" [email protected]:/path/to/files/ ~/Downloads/
rsync
-e
将执行与源路径一起给出的命令。如果您使用另一个-v
.它很可能看起来像
opening connection using: ssh -i "~/.ssh/keyFile" [email protected] -l root 1.2.3.4 rsync --server --sender -vvlogDtpre.iLfxC . /path/to/files/
在这里,您可以看到它将1.2.3.4
被解释为以用户身份在远程主机上执行的命令root
(采用实际的应该作为命令行参数执行的命令)。
rsync
在文件副本的源端启动“发送方”,并在目标端启动“接收方”。然后,这两个进程在彼此之间传送实际数据和校验和等以执行文件复制。您在上面看到的命令是用于(尝试)启动远程主机上的发送器的ssh
命令。rsync
等是用于此目的的--server --sender
内部命令行标志。rsync
该rsync
手册基本上说“不要自己使用这些选项”。
在您的情况下,您可以在错误消息中看到接收器(rsync
本地运行)与远程主机上的发送器通信时出现问题。这是因为发送方没有正确启动,而这又是由于错误的ssh
命令造成的。