rsync认为源主机是一个命令

rsync认为源主机是一个命令

因此,我尝试使用 .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--rshrsync

在你的情况下,使用就足够了

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内部命令行标志。rsyncrsync手册基本上说“不要自己使用这些选项”。

在您的情况下,您可以在错误消息中看到接收器(rsync本地运行)与远程主机上的发送器通信时出现问题。这是因为发送方没有正确启动,而这又是由于错误的ssh命令造成的。

相关内容