同步到亚马逊Linux EC2实例 - 权限被拒绝

5

为了进行测试,我想将一张图片文件从我的桌面放入一个实例文件夹中。

我尝试了这个问题的同一主题提供的解决方案: Rsync到Amazon Ec2实例

所以我尝试了:

sudo rsync  -azv --progress -e "ssh -i ~/.ssh/MyKeyPair.pem" \ ~/Desktop/luffy.jpg  \ec2-user@xx.xx.xx.xxx:/home/ec2-user/myproject/mysite/mysite/media

~/.ssh/ 是 MyKeyPair.pem 文件的位置。事实上,要通过 ssh 进入,我首先执行 cd ~/.ssh 命令,然后运行 ssh -i ... 命令。

但是我遇到了这个错误:

Warning: Identity file ~/.ssh/MyKeyPair.pem not accessible: No such file or directory.
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

我在另一个问答页面上看到有人遇到了同样的错误,并报告说通过yum安装rsync解决了问题。但在我的情况下,rsync已经安装(版本3.0.6)。

如果有人能提供帮助,我将不胜感激!

2个回答

8
  1. 要将本地文件复制到 EC2,应在本地系统上运行 rsync 命令,而不是在 EC2 实例上运行。

  2. 如果用引号将波浪线(~)括起来,则它不会被扩展为主目录。请尝试使用 $HOME。

  3. 如果在本地端使用了 sudo,则可能想在远程端也使用 sudo(例如,复制文件所有权)。可以使用适当的 --rsync-path 选项来完成此操作。

  4. 我建议包括选项 -SHAX,以更接近地保留目标系统上的文件。

  5. 如果 "media" 应该是子目录,则在末尾加上斜杠有助于避免一些奇怪的问题(如果它当前不存在)。

最终结果:

sudo rsync  -azv -SHAX --progress -e "ssh -i $HOME/.ssh/MyKeyPair.pem" \
  --rsync-path "sudo rsync" \
  ~/Desktop/luffy.jpg \
  ec2-user@xx.xx.xx.xxx:/home/ec2-user/myproject/mysite/mysite/media/

这是一篇旧文章,介绍如何在EC2实例中使用rsync。您可以将“ubuntu”替换为Amazon Linux中的“ec2-user”。

http://alestic.com/2009/04/ubuntu-ec2-sudo-ssh-rsync

如果这不能解决您的问题,请提供更多关于您正在运行哪个确切命令以及您收到的确切错误消息的详细信息。

嗨@Eric,谢谢你的尝试!但是使用$HOME似乎也不起作用。我认为这是因为它将$HOME视为/home/ec2-user/-->而不是我的“macbook home”,而是我的“ec2 instance home”。错误消息保持不变,除了第一行,即以下行。 警告:身份文件/home/ec2-user/.ssh/MyKeyPair.pem不可访问:没有这样的文件或目录。 - kuro42
1
如果$HOME被扩展为/home/ec2-user,那么您正在EC2实例上运行命令。 如果您想从本地计算机复制文件到EC2实例,请尝试在本地计算机上执行此操作。 - Eric Hammond
就是这样了! :D 在我的本地系统上运行命令可以正常工作(不需要使用sudo)。谢谢!! - kuro42
如果您在两端都使用sudo(答案已扩展以包括示例),则可以保留EC2实例上的文件所有权。为了使其正常工作,您需要在本地和远程系统上具有相同的用户。 - Eric Hammond

-1
太好了!稍作修改就可以运行了。删除了sudo
sudo rsync -azv --progress -e "ssh -i $HOME/<path_to>" \
  --rsync-path "rsync" \
  <source> \
  <target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接