Download file from amazon aws using a pem - amazon-web-services

I am trying to download a file from amazon using
scp -r xxxxxxx#aws2.xxxxx.com:file.tar.gz /Users/myname/Desktop
It asks for a pass but I use a PEM to connect
Is this possible or am I stuck with FTP?

Assuming you are having an Aws Ec2 linux instance.
To connect using pem file.
scp -i yours.pem xxxxxxx#awsec2ip:/path/to/file
Here
yours.pem - your PEM key file
xxxxxxx - is the username you log in with
awsec2ip - is the IP or DNS alias of the instance
/path/to/file - is the location where the file is stored
This will copy the file into the current folder on the local machine.
Details on Download/Save files from EC2
Another option could be through SFTP.
You can find the details of how to SFTP using your pem file here

scp -i /path/to/pem/file xxxxxxx#aws2.xxxxx.com:/path/to/file/file.tar.gz /Users/myname/Desktop
This command should work for tar.gz file. But if you want to copy a directory recursively you will have to use additional switch -r.

Related

How to copy file from EC2 to local machine?

How to copy a file or folder from EC2 instance? I want to download a file from my server but I don't have idea how to do it.
P.S. I know how to copy in EC2.
You can use scp to securely copy a file from your EC2 instance to your local machine. You will need three things:
Your ec2key.pem key -- You created this when you created the EC2 instance
Your EC2 username and IP -- You can find this in the EC2 Console ('Connect to Instance' button)
Path to your file
On your local machine, open up your command line, and type:
scp -i ec2key.pem username#xx.xxx.xx.xxx:/path/to/file .
Note that the period at the end signifies that the file is to be saved 'here'.

How do I add pre-existing keys SSH to ansible? (crypto)

I am very new to ansible.
I have managed to install it and set up the ec2.py file via the git and set up the IAM root user. but my question is I already have a ec2 instance online that uses a .pem file that amazon has created. i use windows and have created the relative .ppk file when i try to ssh into that ec2 instance from another ec2 instance I see that via
cd ~/.ssh/ the files authorized_keys and known_hosts are created
but when i run ssh ubuntu#ec2-xx-xxx-xx-xxx.us-west-2....
I get a permission denied (puplickey)
I examined the contents of the authorized_keys file and the ppk and pem file and it seems that the public key is stored in the authorized_keys file correctly and the user is correct.
Am I correct in thinking that I need to copy the private key into this file?(although I don't really want to) or is it because I need a passphrase?
and in relation to ansible
How do I utilise this key to manage the host in the same VPC?
Edit (extra): I found out that the authorized_keys file is the file that contains the public key and fingerprint. when i edited the file i was no longer able to access the EC2 instance and it kept asking for a password and saying that the fingerprint had changed. so I guess that's why its best practice to create a ssh-key on the ansible system and then import into AWS
If you can ssh to the host in question via putty with key.ppk file, then:
convert key.ppk back into key.pem
place key.pem somewhere onto the control host (where Ansible is installed)
define inventory (hosts file) for Ansible:
myserver ansible_host=ip-or-dns-of-your-server ansible_user=your-user ansible_ssh_private_key_file=path/to/key.pem
run ansible myserver -m ping to confirm connectivity
This way Ansible will try to connect to your server aliased myserver at ip-or-dns-of-your-server with your-user account using path/to/key.pem private key.

How to download my application file from AWS

I have my app stored on AWS. How can i download/take down all those files to my local system from AWS ?
I know how to upload a file to aws using command line scp but don't know how to download from aws.
You can use scp for downloading too.
Upload : scp your-local-file yourId#yourAWShost:/directory/
Download : scp yourID#yourAWShost:/directory/filename /your/local/host/directory/
btw if you're using ".pem" key with it, you need to add option("-i") too.
For example(Download from yourAWShost)...
scp -i yourkey.pem yourID#yourAWShost:/directory/filename /your/local/host/directory/

Transferring Files between two EC2 Instances in the same region

I have 2 EC2 instances running Ubuntu 14.04 and I need to figure out how to transfer files from one to another. I read the FAQs from Amazon and it says that I can do this without incurring any additional costs if I use the private IP but I am not sure how to transfer the files using that.
Right now I use the scp protocol to do this -
scp -i ~/Path-To-Key-File/AAA.gem /path/file ec2-user#<Elastic IP>:/path/file
I tried replacing the elastic IP with private IP but it doesn't work. Am I doing something wrong here?
Actually, I figured it out ... I just needed to replace the Elastic IP with the private IP and configure the security groups properly to allow instances to communicate!
Transferring from Machine A to Machine B
I am running this code on machine A
scp -i ~/Path-To-Key-File/AAA.pem /path/file ec2-user#<Private IP of Machine B>:/path/file
For security groups, I had to allow SSH protocol over the private IP (from Machine B)!!
Assuming both of your instances are EC2 linux instances.
suppose you want to transfer file from the second instance(ec2-2) to first instance(ec2-1), the command should be run in ec2-1 is:
scp -i /Path-To-Key-File-for-ec2-2/key.pem ec2-user#Elastic-IP-of-ec2-2:/path/filename your/local-path-on-ec2-1/filename
A corresponding discussion you can find here
Hope this help!!
This question is asked about authentication with the .pem file. But accessing without auth could be helpful in some cases. Here, you will authorize another machine instead.
Say, you like to ssh or scp from machine-1 to machine-2.
In machine-1.
Check if there is a public key file (id_rsa.pub) in USER_HOME/.ssh/. If not, generate it with ssh-keygen -t rsa command.
In machine-2
Uncomment PubkeyAuthentication yes in /etc/ssh/sshd_config.
Open file USER_HOME/.ssh/authorized_keys and append contents of id_rsa.pub file from the machine-1.
Now you can copy it with scp as following:
scp username_machine1#ip_machine1:/file/to/copy /destination/path
You are done. Enjoy!!!
For detailed information please check here.
scp -i /home/centos/b1.pem centos#ip:/etc/httpd/conf/httpd.conf httpd.conf.j2
Copy Data from local to ec2 and one ec2 to another(if you are the inside source ec2)
scp -ri <key file path> <copy data file location> <Public DNS (IPv4)>:~/
Example:-
scp -ri practical.pem serverdata1.tar
ubuntu#ec2-xx-xxx-xxx-xxx.ap-southeast-1.compute.amazonaws.com:~/

Uploading file to AWS from local machine

How to use scp command to upload file to aws server
I have .pem file in /Downloads in local machine
I am trying to copy file to /images folder in AWS server
What command can i use ?
Thanks,
You can use plain scp:
scp -i ~/Downloads/file.pem local_image_file user#ec2_elastic_ip:/home/user/images/
You need to put an Elastic IP to the EC2 instance, open port 22 to your local machine IP in the EC2 instance security group, and use the right user (it can be ec2-user, admin or ubuntu (look at the AMI documentation)).
Diego's answer works.. However, if you're unaware of your elastic IP, then you can simply scp using following command (check the order of arguments)
scp -i path-to-your-identifier.pem file-to-be-copied ubuntu#public-IP:/required-path
just for reference, here ubuntu is your AWS user and public-IP is somewhat like 54.2xx.xxx.xxx e.g. 54.200.100.100 or such
(If order is messed up: filename before identifier, then you'll get a Permission denied (publickey).lost connection error)
Also, keep in mind the permissions of .pem file.. Should be 400 or 600. Not public to all.
Hope it helps!
there are number of ways to achieve what you want
use s3cmd http://s3tools.org/s3cmd
or use cyberduck http://cyberduck.ch/
or write a tool using amazon Java API
You can try kitten utility which is a wrapper around boto3. You can easily upload/download files and run commands on EC2 server or on multiple servers at once for that matter.
kitten put -i ~/.ssh/key.pem cat.jpg /tmp [SERVER NAME][SERVER IP]
Where server name is e.g ubuntu or ec2-user etc.
This will upload cat.jpg file to /tmp directory of server
This is the correct way uploading from local to remote.
scp -i "zeus_aws.pem" ~/Downloads/retail_market_db-07-01-2021.sql ubuntu#ec2-3-108-200-27.us-east-2.compute.amazonaws.com:/var/www/
Could be a better approach
Another alternative way to scp is rsync.
Some of the benefits of rsync
faster - uploads only the deltas
enable compression
you can exclude some files from the upload
resume
limit the transfer bandwidth
The rsync cmd
rsync -ravze "ssh -i /home/your-user/your-key.pem " --exclude '.env' --exclude '.git/' /var/www/your-folder-to-upload/* ubuntu#xx.xxx.xxx.xxx:/var/www/your-remote-folder
Now, in case you find this syntax a little bit verbose you can use aws-upload which does all the above but you just tabbing.