79

I have an EC2 instance running and I am able to SSH into it.

However, when I try to rsync, it gives me the error Permission denied (publickey).

The command I'm using is:

rsync -avL --progress -e ssh -i ~/mykeypair.pem ~/Sites/my_site/* root@ec2-XX-XXX-XXX-XXX.us-west-2.compute.amazonaws.com:/var/www/html/

I also tried

rsync -avz ~/Sites/mysite/* -e "ssh -i ~/.ssh/id_rsa.pub" root@ec2-XX-XXX-XXX-XXX.us-west-2.compute.amazonaws.com:/var/www/html/

Thanks,

a53-416
  • 3,585
  • 6
  • 34
  • 44

5 Answers5

122

I just received that same error. I had been consistently able to ssh with:

ssh -i ~/path/mykeypair.pem \
ubuntu@ec2-XX-XXX-XXX-XXX.us-west-2.compute.amazonaws.com

But when using the longer rsync construction, it seemed to cause errors. I ended up encasing the ssh statement in quotations and using the full path to the key. In your example:

rsync -avL --progress -e "ssh -i /path/to/mykeypair.pem" \
       ~/Sites/my_site/* \ 
       root@ec2-XX-XXX-XXX-XXX.us-west-2.compute.amazonaws.com:/var/www/html/

That seemed to do the trick.

Rob Kielty
  • 7,958
  • 8
  • 39
  • 51
natxty
  • 1,336
  • 1
  • 9
  • 4
  • 1
    if you had trouble with the verbosity of the cmd you can give a try to [aws-upload](https://github.com/borracciaBlu/aws-upload). – borracciaBlu Mar 29 '17 at 03:13
  • If you want hidden files to transfer as well, remove * from the source path: `rsync -va -e "ssh -i /path/to/key.pem" /source/path/ ubuntu@ec2-nn-nnn-nnn-nnn.us-east-2.compute.amazonaws.com:/destination/path/` – enharmonic Jun 14 '19 at 21:26
18

use rsync to copy files between servers

copy file from local machine to server

rsync -avz -e "ssh -i /path/to/key.pem" /path/to/file.txt  <username>@<ip/domain>:/path/to/directory/

copy file from server to local machine

rsync -avz -e "ssh -i /path/to/key.pem" <username>@<ip/domain>:/path/to/directory/file.txt  /path/to/directory/

note: use command with sudo if you are not a root user

anjaneyulubatta505
  • 10,713
  • 1
  • 52
  • 62
17

Below is what I used and it worked. Source was ec2 and target was home machine.

 sudo rsync  -azvv -e "ssh -i /home/ubuntu/key-to-ec2.pem" ec2-user@xx.xxx.xxx.xx:/home/ec2-user/source/ /home/ubuntu/target/
Deepti Kohli
  • 1,859
  • 1
  • 14
  • 6
  • Potentially dangerous. Erased a day's work at destination if you didn't understand what it means as it overwrites by whether files have differences. – momo668 Aug 09 '22 at 17:48
12

After suffering a little bit, I believe this will help:

I am using the below command and it has worked without problems:

rsync -av --progress -e ssh /folder1/folder2/* root@xxx.xxx.xxx.xxx:/folder1/folder2

First consideration:

Use the --rsync-path

I prefer in a shell script:

#!/bin/bash

RSYNC = /usr/bin/rsync

$RSYNC [options] [source] [destination]

Second consideration:

Create a publick key by command below for communication between the servers in question. She will not be the same as provided by Amazon.

ssh-keygen -t rsa

Do not forget to enable permission on the target server in /etc/ssh/sshd_config (UBUNTU and CENTOS).

Sync files from one EC2 instance to another

http://ask-leo.com/how_can_i_automate_an_sftp_transfer_between_two_servers.html

Use -v option for verbose and better identify errors.

Third Consideration

If both servers are on EC2 make a restraint by security group

In the security group Server Destination:

inbound: Source / TCP port 22 / IP Security (or group name) of the source server

Community
  • 1
  • 1
rmsys
  • 931
  • 13
  • 18
  • thanks for providing the second solution. you are a savior! the ask-leo site is a good resource for those trying to move files between 2 servers – zock Nov 26 '13 at 03:19
2

This worked for me:

nohup rsync -zravu --partial --progress  -e "ssh -i xxxx.pem" ubuntu@xx.xx.xx.xx:/mnt/data   /mnt2/ &
Rami
  • 7,879
  • 12
  • 36
  • 66
HARSH
  • 57
  • 2