Transferencia por FTP de manera automatica sin usar “expect”

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)

7 Responses to “Transferencia por FTP de manera automatica sin usar “expect””


  1. 1 Milton agosto 7, 2009 de 5:52 pm

    Muy bueno tu sitio, estoy suscripto a él desde hace tiempo.

    Una alternativa mejor que ftp y expect: SSH.

    Los datos se transfieren encriptados y podés transferir archivos (comando scp) y ejecutar comandos remotamente (comando ssh), todo en forma segura.

    Sumado a lo anterior podés utilizar certificados, con lo que no tenés que poner ni usuario ni password en ningún lado (si los certificados son correctos, no pide usuario y password para los comandos anteriores). Para crear certificados: ssh-keygen.

    La condición es que las máquinas tengan servidor ssh instalado, pero esto viene por defecto en (casi) todas las distribuciones GNU/Linux.

    Saludos,
    1000ton.-

    • 2 superpiwi agosto 7, 2009 de 6:06 pm

      Cierto, lo que ocurre es que ssh tampoco esta instalado en todas las maquinas ^^, lo que si te encuentras siempre son los protocolos “primitivos” telnet y ftp (por eso quise comentar el caso mas generico).

  2. 4 Palomino agosto 24, 2009 de 7:35 pm

    Alguien sabe como enviar archivos por medio de ftp en lenguaje C?

  3. 5 juan junio 20, 2010 de 11:31 pm

    ay algo que no entiendo este script me puede servir para enviar de un server ssh a uno de ftp pero como le digo que archivo quiero enviar de mi server que nadamas tiene ssh y donde me lo debe de poner en el server ftp es lo que no e podido entender

  4. 6 Pablo diciembre 30, 2014 de 8:35 pm

    donde debo modificar para transferir solo carpeta importantes de un servidor a otro


  1. 1 soup.io Trackback en noviembre 11, 2014 de 3:18 am

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s







¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map
agosto 2009
L M X J V S D
« Jul   Sep »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Blog Stats

  • 30.955.453 hits

A %d blogueros les gusta esto: