En mi trabajo he de conectarme a muchas maquinas (Solaris,Linux) y examinar ficheros de trazas. A veces es pesado trabajar en modo consola en una de esas maquinas remotas usando solo el editor «vi» para examinar enormes ficheros de trazas que ocupan varios megas. Asi que lo que hago por lo general es llevarme los ficheros a mi maquina local para poder examinarlos comodamente con algun editor grafico. Generalmente todos los scripts de transferencia los hago mediante «expect» del que ya comente algo aqui. Mediante expect podemos ejecutar comandos como «ftp» o «telnet» sin necesidad de estar delante de la consola, pues podemos meter el usuario y la password de manera automatica. Aqui sin embargo os dejo un script para hacer esto mismo mediante FTP y que no requiere del uso de «expect», pues en ocasiones (veo muertos)… Perdon, queria decir… en ocasiones expect no esta instalado en todas las maquinas.
La idea es, te montas tu propio servidor FTP en una maquina local. Y luego copias este script en todas esas maquinas remotas donde quieras transferir sus ficheros a tu servidor local. En este script solo has de editar las variables «host», «usuario» y «password» con la direccion IP de tu servidor FTP, y el usuario y password de acceso FTP a tu servidor local (que es a donde quieres enviar los archivos remotos). Luego podrias crear un alias del estilo:
alias enviame="/path/al/script/gFTP.sh"
donde el script (gFTP.sh) es:
#!/bin/bash
#********************************************************************************
# Script para enviar ficheros por FTP de manera automatizada
#
# @author Piwi
# @version 0.0.0.1 - 30 Julio 2009
#
# Nota: Es mejor usar "expect" pero no todas las maquinas lo tienen instalado.
# Esta solucion funciona con cualquier interprete de bash.
#
# IMPORTANTE: En el directorio donde se generen los ficheros temporales, el usuario
# debe tener permisos de escritura.
#
#*******************************************************************************
# Variables preconfiguradas. Sustituye aqui por los valores de tu FTP Server.
host=soledad
usuario=prepago
password=prepago
path=/
ftpfile=ftp.jose
ftpres=ftp.jose.res
#-------------------------------------------------------------
# @genera_ftp_script
#
# Genera un script FTP para transferir los archivos indicados.
#
# @param El fichero o La lista de ficheros a transferir
# @param el directorio destino dentro del ftp server
#-------------------------------------------------------------
function genera_ftp_script
{
# Ver la lista de ficheros que se reciben como parametro
for i in $1; do
echo item: $i
done
data=$1
echo "Recibido: $data"
echo "#!/bin/bash" > $ftpfile
echo "ftp -n -iv $host > $ftpres <> $ftpfile
echo "user $usuario $password" >> $ftpfile
echo "binary" >> $ftpfile
echo "hash" >> $ftpfile
echo "cd $2" >> $ftpfile
echo "mput \"$1\"" >> $ftpfile
echo "bye" >> $ftpfile
echo "EOF" >> $ftpfile
#echo "cat $ftpres" >> $ftpfile
return "0"
}
#---
#-----------
# PRINCIPAL
#-----------
# Chequear los parametros recibidos
if [ "${1}" ]; then
#echo args is: "${1}"
continue=0
else
echo ""
echo " Mueve los ficheros indicados a un servidor FTP predeterminado (variables internas en el script)"
echo " Sintaxis: $0 [fichero|Lista de ficheros] [Directorio_destino]"
echo " Ejemplo: $0 \"*.mp3\" MUSICA"
echo " (Si se usan ficheros con patrones recursivos * el parametro debe ir encerrados entre comillas simples. Ejemplo: \"cat*.txt\" )"
echo ""
echo " ERROR: No se ha especificado ningun parametro.No se enviara por Ftp ningun archivo."
echo ""
exit
fi
# Comprobamos si se indico alguna ruta destino. Si no se indica ninguna, por defecto se usa "/"
if [ "x${2}" == "x" ]; then
path="/"
else
path=$2
continue=0
fi
# Transferir por FTP los ficheros indicados
genera_ftp_script "$1" "$path"
# Le damos permiso de ejecucion al script FTP de transferencia creado y lo ejecutamos
chmod +x $ftpfile
resultado=`./$ftpfile`
# Imprimir resultados de la transferencia FTP
echo ""
echo "-- Respuesta FTP --"
cat $ftpres
echo "-- Fin FTP --"
echo ""
# Borrar los ficheros temporales generados
#rm $ftpfile
#rm $ftpres
#------------------end of class gftp.sh ----
De manera que cuando estes en un directorio de la maquina remota, y quieras enviar por FTP algun archivo a tu servidor FTP, podrias ejecutar por ejemplo:
$ enviame "*.doc" "/DOCUMENTOS"
(enviaria por ftp todos los archivos *.doc del directorio actual y los dejaria en la carpeta /DOCUMENTOS del servidor FTP).
o
$ enviame traza1.log
(enviaria por ftp el archivo traza1.log)
Comentarios recientes