Ssh
rsync 認為源主機是命令
因此,我嘗試使用
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
命令造成的。