There are a few ways to transfer files to and from an Amazon EC2 instance. If you are using a desktop environment, then you can use programs like Putty, WinSCP or MobaXterm. These graphically driven programs make transferring files very simple.
However, from the command line it can be a little trickier. In this example we will look at transferring files to and from an Amazon EC2 instance from the Linux command line using SCP.
To be able to connect to your Amazon EC2 instance you will require your EC2 Instance key pair. Copy your key file to a directory on your source Linux server.
Before we can use the key we have to change its permissions, if you don't do this Amazon will reject the key on security grounds.
Use chmod to change your key.pem file permissions.
chmod 0400 keyfile.pem
The keyfile.pem should now have the following permissions: -r——–. 1 root root 1692 Jul 26 07:47 keyfile.pem
We are now ready to transfer files to and from our EC2 Instance. To connect to the EC2 instance you can use either the currently assigned IP Address, your Elastic IP Address if you have one, or the Public DNS (IPv4).
My test AWS EC2 Intance has the following details.
Elastic IP Address: 220.127.116.11
Public DNS (IPv4): ec2-35-177-4-81.eu-west-2.compute.amazonaws.com
The syntax of SCP is as follows:
scp -i <keypair> /source/myfile.txt login@address:/destination
I am going to transfer a file called TestFile.txt to the home directory on my EC2 Instance, for this I can use the following syntax:
scp -i keyfile.pem /home/root/TestFile.txt firstname.lastname@example.org:/home/ec2-user
If this is the first time connecting to an instance, you will see the following message:
The authenticity of host '18.104.22.168 (22.214.171.124)' can't be established. ECDSA key fingerprint is 02:8c:04:6c:e9:d5:aa:97:e3:40:35:a6:d9:f6:24:ed. Are you sure you want to continue connecting (yes/no)?
TestFile.txt 100% 0 0.0KB/s 00:00
You can connect to your EC2 Instance via SSH to check the file(s) have copied:
sudo ssh -i keyfile.pem email@example.com
Last login: Tue Jul 25 21:16:51 2017 from dsl-217-155-64-20.zen.co.uk __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/ 4 package(s) needed for security, out of 6 available Run "sudo yum update" to apply all updates.
ls -l -rw-r--r-- 1 ec2-user ec2-user 0 Jul 26 07:05 TestFile.txt
The file permissions are the same, but the owner and group have changed (no root user on the EC2 Instance I guess.)
To retrieve file(s) from the EC2 instance, use the following syntax.
sudo scp -i keyfile.pem firstname.lastname@example.org:/home/ec2-user/TestFile.txt /home/root/
You will see a confirmation of the file being copied.
TestFile.txt 100% 0 0.0KB/s 00:00
If you wish to copy an entire directory you can use the -r switch.
Here I have a directory called TestFolder and I want copy this directory and its contents (three files, file1.txt, file2.txt and file3.txt) to my EC2 instance.
To copy the directory and the files, use the following syntax:
sudo scp -i keyfile.pem -r /home/root/TestFolder email@example.com:/home/ec2-user file1.txt 100% 0 0.0KB/s 00:00 file2.txt 100% 0 0.0KB/s 00:00 file3.txt 100% 0 0.0KB/s 00:00
If we look at the destination folder, we will see our folder and files.
ls -l TestFolder -rw-r--r-- 1 ec2-user ec2-user 0 Jul 26 07:22 file1.txt -rw-r--r-- 1 ec2-user ec2-user 0 Jul 26 07:22 file2.txt -rw-r--r-- 1 ec2-user ec2-user 0 Jul 26 07:22 file3.txt