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
#