Ssh

rsync 作為 root 到 /var/www 失敗並出現“協議版本不匹配”

  • April 11, 2020

我正在嘗試設置一種命令方式,將網站程式碼從開發機器移動到我的 Ubuntu EC2 實例中,並將其直接複製到 /var/www/mywebsite 文件夾中,nginx 期望在該文件夾中找到該框中的網站.

這些 Ubuntu AMI 帶有一個預設的 ubuntu 使用者。我可以毫無問題地將文件夾從開發機器同步到 EC2 實例的 /home/ubuntu/ 文件夾:

rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" source-folder ubuntu@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:~/code

但是當我嘗試以 root 身份將同一個文件夾同步到 /var/www 時:

rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" source-folder root@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:/var/www/

我收到以下錯誤:

protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(174) [sender=3.0.9]

我不太清楚為什麼會這樣。我注意到當我收到以下消息時,我無法以 root 身份登錄:

Please login as the user "ubuntu" rather than the user "root".
Connection to ec2[...] closed.

這可能解釋了上述行為。sshd_config 確實有“PermitRootLogin”,是的,但我想這在其他地方被阻止了。

我想一種選擇是更改 /var/www 文件夾的權限(現在它是 755 root root)並允許 ubuntu 在那裡複製文件,而不必每次都提升到 root。但是,我不確定這在安全方面是否是一個好主意,以及這是否是正確的解決方案,所以我很感激建議。

謝謝!

您還可以在遠端電腦上使用 sudo 啟動 rsync 以使用 root 權限執行它。您可以使用的選項是--rsync-path

rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" --rsync-path="sudo rsync" source-folder ubuntu@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:/var/www/

引用自:https://serverfault.com/questions/508171