rsync is a program that behaves in much the same way that rcp does, but has many more options and uses
the rsync remote-update protocol to greatly speed up file transfers when the destination file is being
updated.
The rsync remote-update protocol allows rsync to transfer just the differences between two sets of files
across the network connection, using an efficient checksum-search algorithm described in the technical
report that accompanies this package.
assuming your private key is at ~/.ssh/id_rsa and the files you want to send can be filtered with *.derp
To generate a public / private key pair :
$ ssh-keygen -t rsa
The above will generate 2 files, ~/.ssh/id_rsa (private key) and ~/.ssh/id_rsa.pub (public key)
To setup the SSH keys for usage (one time task) :
Copy the contents of ~/.ssh/id_rsa.pub and paste in a new line of ~devops/.ssh/authorized_keys in myserver.org server. If ~devops/.ssh/authorized_keys doesn't exist, feel free to create it.
If you are ok with entering your password once for every run of the script, you can do so easily using an SSH master connection.
#!/usr/bin/env bash
USER_AT_HOST="user@host" # use "$1@$2" here if you like
SSHSOCKET=~/".ssh/$USER_AT_HOST"
# This is the only time you have to enter the password:
# Open master connection:
ssh -M -f -N -o ControlPath="$SSHSOCKET" "$USER_AT_HOST"
# These do not prompt for your password:
scp -o ControlPath="$SSHSOCKET" file1.xy "$USER_AT_HOST":remotefile1.xy
scp -o ControlPath="$SSHSOCKET" file2.xy "$USER_AT_HOST":remotefile2.xy
# You can also use the flag for normal ssh:
ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo hello"
ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo world"
# Close master connection:
ssh -S "$SSHSOCKET" -O exit "$USER_AT_HOST"
here's bash code for SCP with a .pem key file.
Just save it to a script.sh file then run with 'sh script.sh'
Enjoy
#!/bin/bash
#Error function
function die(){
echo "$1"
exit 1
}
Host=ec2-53-298-45-63.us-west-1.compute.amazonaws.com
User=ubuntu
#Directory at sent destination
SendDirectory=scp
#File to send at host
FileName=filetosend.txt
#Key file
Key=MyKeyFile.pem
echo "Aperture in Process...";
#The code that will send your file scp
scp -i $Key $FileName $User@$Host:$SendDirectory || \
die "@@@@@@@Houston we have problem"
echo "########Aperture Complete#########";
#!/usr/bin/env bash
password="YOURPASSWORD"
username="YOURUSERNAME"
dir_origin="YOURSOURCEDIRECTORY"
dir_destination="REMOTEDESTINATION"
Ip="SERVERIP"
echo "Uploading files to remote server...."
sshpass -p "$password" scp -rC $dir_origin $username@$Ip:$dir_destination
echo "File upload to remote server completed! ;)"
Using rsync
#!/usr/bin/env bash
password="YOURPASSWORD"
username="YOURUSERNAME"
dir_origin="YOURSOURCEDIRECTORY"
dir_destination="REMOTEDESTINATION"
Ip="SERVERIP"
echo "Uploading files to remote server...."
sshpass -p "$password" rsync -avzh $dir_origin $username@$Ip:$dir_destination
echo "File upload to remote server completed! ;)"
**NOTE :**You need to install sshpass (eg by running apt install sshpass for deb like
os eg Ubuntu) that will enable you to auto upload files without password prompts