Automate scp file transfer using a shell script

Viewed 390261

I have some n number of files in a directory on my unix system. Is there a way to write a shellscript that will transfer all those files via scp to a specified remote system. I'll specify the password within the script, so that I don't have to enter it for each file.

14 Answers

There are 2 quick ways of achieving this:

  1. Using scp

    #!/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! ;)"
    
    
  2. 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

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#########";
Related