rsync作为根到/ var / www失败,“协议版本不匹配”

我试图设置一个命令的方式,将网站代码从开发机器上移到我的Ubuntu EC2实例中,并将其直接复制到/ var / www / mywebsite文件夹中,nginx希望在该文件夹中find网站。

这些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”是的,但是我想这个在别的地方被封锁了。

我想一个select是改变/ var / www文件夹的权限(现在是755根),并允许ubuntu在那里复制文件,而不必每次都提升到root。 我不知道这是否是一个好主意安全明智,如果这是正确的解决scheme,所以我会很感激的build议。

谢谢!

您也可以使用远程计算机上的sudo启动rsync,以root权限运行rsync。 您可以使用的选项是--rsync-path

 rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" --rsync-path="sudo rsync" source-folder [email protected]:/var/www/ 

你在客户端和服务器上的rsync版本是什么? 跑

  rsync --version 

在客户端和服务器端应该是一样的。

尝试增加SSH服务器上的日志详细程度(在sshd_config和/etc/init.d/ssh restart中进行Logleveldebugging),并确保连接与单个用户无关(如果要以login方式login,用户子句应该为空或包含根根 – 这是一个坏主意,除了debugging)。 然后,在/var/log/auth.log中查找错误。