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 #