rsync到EC2:标识文件不可访问

我试图rsync一个文件到我的EC2实例:

rsync -Paz --rsh "ssh -i ~/.ssh/myfile.pem" --rsync-path "sudo rsync" file.pdf [email protected]:/home/ubuntu/ 

这给出了以下错误消息:

 Warning: Identity file ~/.ssh/myfile.pem not accessible: No such file or directory. [email protected]'s password: 

pem文件绝对位于path~/.ssh/myfile.pem ,但是: vi ~/.ssh/myfile.pem显示了我的文件。

如果我从rsync命令的最后删除远程path:

 rsync -Paz --rsh "ssh -i ~/.ssh/myfile.pem" --rsync-path "sudo rsync" file.pdf [email protected] 

然后命令似乎工作…

 building file list ... 1 file to consider file.pdf 41985 100% 8.79MB/s 0:00:00 (xfer#1, to-check=0/1) sent 41795 bytes received 42 bytes 83674.00 bytes/sec total size is 41985 speedup is 1.00 

…但是当我去远程服务器,实际上没有任何传输。

我究竟做错了什么?

 --rsync-path "sudo rsync" 

这使得rsync由特权用户( root )运行,所以~/是根目录的path。 如果你省略这部分代码,它应该工作。

PS。 scp正在工作,因为你使用普通帐户运行它。

PS2。 删除远程path也能正常工作,但是这不会通过networking发送任何东西,而只是将文件“file.pdf”复制到文件名为[email protected](见ls -l

当它只是一对夫妇的文件时,使用rsync对于scp来说并不是一个巨大的胜利。 但是,如果你正在pipe理一个完整的文档树,这是很好的,因为它只发送差异。 这是我总是这样做的:

在我的~/.ssh/config文件中为远程服务器设置一个条目

 Host easy-short-name HostName ec2-XXX-XX-XX-X.compute-1.amazonaws.com IdentityFile ~/.ssh/private_key.pem User ubuntu 

那么你可以使用这个rsync命令,而不用搞乱用户名,密钥文件或长主机名:

 rsync -avrk source-dir easy-short-name:~/destination-dir 

这个设置也可以和scp并且具有允许我使用ssh easy-short-name来login的好处。