![以 root 身份 rsync 到 /var/www 失败,并显示“协议版本不匹配”](https://linux22.com/image/611782/%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%20rsync%20%E5%88%B0%20%2Fvar%2Fwww%20%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%B9%B6%E6%98%BE%E7%A4%BA%E2%80%9C%E5%8D%8F%E8%AE%AE%E7%89%88%E6%9C%AC%E4%B8%8D%E5%8C%B9%E9%85%8D%E2%80%9D.png)
我正在尝试设置一个命令方式将网站代码从开发机器移动到我的 Ubuntu EC2 实例中,并将其直接复制到 /var/www/mywebsite 文件夹中,nginx 希望在该文件夹中找到网站。
这些 Ubuntu AMI 带有默认的 ubuntu 用户。我可以毫无困难地将文件夹从开发机器 rsync 到 EC2 实例的 /home/ubuntu/ 文件夹:
rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" source-folder [email protected]:~/code
但是当我尝试以 root 身份将同一文件夹 rsync 到 /var/www 时:
rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" source-folder [email protected]:/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 身份 ssh 进入,因为我收到以下消息:
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 权限。但是我不确定这在安全方面是否是个好主意,也不确定这是否是正确的解决方案,所以我很希望得到建议。
谢谢你!
答案1
您还可以在远程计算机上使用 sudo 启动 rsync,以 root 权限运行它。您可以使用的选项是--rsync-path
:
rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" --rsync-path="sudo rsync" source-folder [email protected]:/var/www/