Transfencia de archivos via ssh sin password

0
1905

El siguiente shell script tiene la funcion de transferir una serie de archivos a un servidor remoto usando ssh sin passwd, los archivos transferidos conservan la fecha actual de creacion y los permisos.

#---------------------------------------------------------
#!/bin/sh 
#
# scp-cdrs.sh: Shell Script para la transferencia de achivos via SCP 
#
# Created by: LCC. Domingo Varela Y. 
# Date: 17:05:00 01/Abr/09
# Modified: 08:13:40 08/May/09
# Last Modified: 18:18:40 02/Sept/09
# Probe: True
#

# Settings
Dir_Remoto=`date +%Y%m%d`
Dir_Local=`date +%Y%m%d`
HORA_LOCAL=`date`
Directory='/directorio/de/trabajo/'
HOST='111.222.333.4'
USER='usuario'
SRC='/home/username/'
DST='/directorio/destino/'
BKP_LOG='/tmp/Logs/bkp_log.log'
ETIQUETA='Z-'
Contador=1
Archs='Tipo_de_archivo*'
Cero="0"

/bin/touch $BKP_LOG
cd $SRC

echo
echo "---------- INICIO DEL PROCESO --------------"
echo "Directorio de trabajo actual '$SRC' ... OK"
echo "--------------------------------------------"

ls -l $Archs > /cdrani/Logs/Found-Files.txt
num=`wc -l /cdrani/Logs/Found-Files.txt|awk '{print $1}'` 
#echo "Existe(n) '$num' archivo(s) a transferir !!!  ... OK"

if [ "$num" -gt $Cero ]; then
echo
echo "****************************************************"
echo "Hora y fecha de Inicio '$HORA_LOCAL'"
echo "Para  el proceso de archivos ... OK"
echo "Existe(n) '$num' archivo(s) a transferir !!!  ... OK"
echo "****************************************************"
echo
date | awk '{print $2,"",$3}'>/cdrani/Logs/Fecha.txt
#cat /cdrani/Logs/Fecha.txt

while read mes dia
do
   if [ $dia -le 9 ]; then
   ls -l stream*| grep $mes"  "$dia |cut -d ' ' -f 4- | awk '{ print $3,$4,$5,$6}'> /cdrani/Logs/filtro-cdr0.txt
   ls -l stream*| grep $mes"  "$dia |cut -d ' ' -f 4- | awk '{ print $3,$4,$5,$6}'>> /cdrani/Logs/bkp_log.log
  else 
   ls -l stream* | grep $mes" "$dia |cut -d ' ' -f 4- |awk '{ print $3,$4,$5,$6}' > /cdrani/Logs/filtro-cdr0.txt
   ls -l stream* | grep $mes" "$dia |cut -d ' ' -f 4- |awk '{ print $3,$4,$5,$6}' >> /cdrani/Logs/bkp_log.log
  fi
done </cdrani/Logs/Fecha.txt

echo
echo "=================================================================="
echo "Mostramos el contenido del archivo (filtro-cdr0.txt) ... OK" 
echo "=================================================================="
echo
cat /cdrani/Logs/filtro-cdr0.txt
echo 
sleep 1 
for Archivo in `cat /cdrani/Logs/filtro-cdr0.txt | awk '{ print $4}'`
do
#
# Las sigtes 5 lineas se agregaron para la comprobacion de la conexion via ssh
#
   echo "Comprobando la conexion via ssh al servidor BYTE ..."
   /usr/bin/ssh  $USER@$HOST /usr/bin/ls -l
   if test $? -eq 0
    then
     echo
     echo "Conexion establecida !!!"
#
# +++
#
     echo 
     echo "----------------------------------------------------------"
     echo "Nombre del archivo a copiar es: '$Archivo' ... OK"
     echo
     echo "Copiando Archivo No. '$Contador' cuyo  nombre es '$Archivo' ... OK " 
     echo "Cambiamos los permiso del archivo '$Archivo' a -rwxrwxrwx ... OK " 
     /bin/chmod 777 $Archivo
     echo
     echo "El archivo a Copiar es '$Archivo' con etiqueta '$ETIQUETA' ... OK"
     /usr/bin/scp -p $Archivo $USER@$HOST:$DST$ETIQUETA$Archivo
     echo
     echo "El Archivo etiquetado '$ETIQUETA$Archivo'  ha sido transferido  .... OK"
     echo "Listamos el contenido del directorio remoto '$DST' ... OK"
     /usr/bin/ssh $USER@$HOST /usr/bin/ls -l ./`basename ${ETIQUETA}${Archivo}`
     echo
     echo "Quitamos la etiqueta al archivo '$ETIQUETA$Archivo'  y la dejamos como '$Archivo' ... OK"
     /usr/bin/ssh $USER@$HOST /usr/bin/mv ./`basename ${ETIQUETA}${Archivo}` ./`basename ${Archivo}`
     echo
     echo "Nuevamente listamos el contenido del directorio remoto '$DST' ... OK"
     /usr/bin/ssh $USER@$HOST /usr/bin/ls -l ./`basename ${Archivo}`
     sleep 1
     let Contador=Contador+1
     echo
     echo "Se mueve el archivo '$Archivo' al directorio temporal '$Directory$Dir_Local' ... OK"
     /bin/mv $Archivo $Directory$Dir_Local
     echo "Eliminamos una linea del archivo (filtro-cdr0.txt) ... OK"
     /bin/sed -i '1d' /cdrani/Logs/filtro-cdr0.txt
     echo "----------------------------------------------------------"
     echo
#
# Las sigtes 5 lineas son parte del if para la comprobacion de conexion via SSH
#
   else 
     echo
     echo "Error de conexion via SSH, no se pudo contactar el servidor BYTE !!!"
     echo "Hora y fecha actual $HORA_LOCAL"
     break
   fi
#
# ++
#

done
echo "****************************************************"
echo "Fin de la transferencia "
echo "****************************************************"
echo
else
    echo
    echo "------------------------------------- ATENCION ------------------------------------------"
    echo "Hora y fecha actual '$HORA_LOCAL'" 
    echo "El directorio '$SRC' contiene '$num' archivos stream0.* que transferir ... OK"
    echo "-----------------------------------------------------------------------------------------"
    echo
fi
# Fin del Shell Script
#

LEAVE A REPLY

Please enter your comment!
Please enter your name here