我在windows上 安裝好了 cwRsync客戶端,並將 bin的路徑加入到了環境變量 path 中;在遠程 linux 服務器上 安裝並配置了 rsync。此時向遠程服務器同步數據:
.\rsync.exe -a "/cygdrive/d/a.bat" [email protected]:/root/
結果失敗,報錯:
Error: dup() in/out/err failed
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
在Stack Overflow上,我看到了類似問題:
原因是 ssh 的版本和 rsync 的版本不匹配。
我用 where ssh 查看了ssh 所在的目錄,發現ssh有好幾個。
原來,我之前裝過的 Git 也有 ssh.exe 這個程序,而它也配置在了 環境變量 path 中。而 rsync 調用了Git 的 ssh,導致錯誤。
解決的方法有多種。
方法1. 在調用命令時,顯式指定 ssh 的路徑:
.\rsync.exe -a -e " .\ssh -p 22" "/cygdrive/d/a.bat" [email protected]:/opt/
這裏," .\ssh -p 22" 表明我指定使用的是當前目錄中的 ssh。
方法2. 修改 環境變量 path,把 cwRsync 的bin 的路徑其他包含ssh的文件夾路徑的前面。
缺點:其他程序可能會使用 cwRsync 的ssh 而不是他們自己的ssh,造成錯誤。