Ssh

rsync 認為源主機是命令

  • November 7, 2018

因此,我嘗試使用rsync. 我使用的命令是:

$ rsync --progress -avz -e "ssh root@1.2.3.4 -i ~/.ssh/keyFile" root@1.2.3.4:/path/to/files/ ~/Downloads/

這是提示的內容:

root@1.2.3.4'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遠端主機地址被解釋為命令似乎很奇怪?!我不確定這是如何以及為什麼會發生的。如何更新命令以達到預期結果並開始復製文件?

我很確定您不想在 -e 標誌中包含 ssh 命令的 user@host 部分。嘗試

rsync --progress -avz -e "ssh -i ~/.ssh/keyFile" root@1.2.3.4:/path/to/files/ ~/Downloads/

ssh命令與 中的-e(or --rsh) 選項一起使用時rsync,不需要按名稱提及遠端主機,因為這是源規範的一部分(在您的命令中)。

在您的情況下,使用就足夠了

rsync --progress -avz -e "ssh -i ~/.ssh/keyFile" root@1.2.3.4:/path/to/files/ ~/Downloads/

rsync將執行-e與源路徑一起給出的命令。如果您使用另一個-v. 它很可能看起來像

opening connection using: ssh -i "~/.ssh/keyFile" root@1.2.3.4 -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命令造成的。

引用自:https://unix.stackexchange.com/questions/472099