sftp/scp scripting
The situation: I need to move files from one server to another using only the OpenSSH tools. All authentication/authorization is done via public key handshakes.
The restrictions: I cannot use expect or any other scripting language beyond shell scripts.
The goal: To minimize the number of characters I need to type and provide a platform for our batch guy to build on for the automated transfers.
And without further ado, have at thee. (Note: I did remove username, sftp connection string, and the root paths from my script to eliminate identification)
#!/bin/bash
######################################################
###### Utility script for Pushing/Pulling files ######
###### from the enterprise sftp solution. ############
######################################################
##################################################
############# SETTING THE VARIABLES ##############
##################################################
TYPE=$1
FILENAME=$2
USER=”"
SFTP=”"
BASEPATH=”"
SFTPPATH=$BASEPATH
LOCALPATH=`pwd`
MAX=$#
ARGS=(“$@”)
for ((COUNT=2; COUNT < MAX; COUNT++))
do
if [ ${ARGS[$COUNT]} == “-s” ];then
SFTPPATH=$SFTPPATH/${ARGS[$COUNT+1]}
COUNT=$COUNT+1
elif [ ${ARGS[$COUNT]} == “-l” ];then
LOCALPATH=${ARGS[$COUNT+1]}
COUNT=$COUNT+1
fi
done
##################################################
########### COPY FROM THE SFTP SERVER ############
##################################################
if [ $TYPE == "GET" ]; then
scp $USER@$SFTP:$SFTPPATH/$FILENAME $LOCALPATH/$FILENAME
##################################################
############ COPY TO THE SFTP SERVER #############
##################################################
elif [ $TYPE == "PUT" ]; then
scp $LOCALPATH/$FILENAME $USER@$SFTP:$SFTPPATH/$FILENAME
##################################################
########## DELETE FROM THE SFTP SERVER ###########
##################################################
elif [ $TYPE == "DEL" ]; then
sftp -b /dev/stdin $USER@$SFTP <<INP
cd $SFTPPATH
rm $FILENAME
ls
bye
INP
##################################################
############### SCRIPT ARGS HELP #################
##################################################
elif [ $TYPE == "-h" ]; then
echo “ sftp_util syntax is:”
echo “ ./sftp_util.sh <GET|PUT|DEL|-h> <FileName> [-s] [-l]”
echo “ GET GET is used to retrieve a file from the remote server.”
echo “ PUT PUT is used to place a file on the remote server.”
echo “ DEL DEL is used to delete a file from the remote server.”
echo “ -h -h is used to print this help menu.”
echo “ -s -s <sftp server path of/to file, do not include a leading ‘/’ (ex. test/test2)>”
echo “ -l -l <sftp server path of/to file>”
else
echo “Please use ./sftp_util.sh -h for help”
fi
Usage goes a little something like this:
server1$> ./sftp_util.sh PUT file -s test/empty_dir -l /home/user
server2$> ./sftp_util.sh GET file -s test/empty_dir -l /here
server2$ ./sftp_util.sh DEL file -s test/empty_dir
Nothing overly fancy, just a quick little script to save me time and have a bit of fun on a slow work day.