martes, 5 de agosto de 2014

[Linux - bash] - Automatizar una conexion SFTP en Bash

Existen ciertos sistemas en los que se nos requiere conectarnos por SFTP sin alternativa a ninguna otra solución, y necesitamos generar algún tipo de automatización, ya que todos los días hay que descargar un archivo en particular. Por ej, un Backup.



Para este tipo de automatizaciones, se utiliza una llave RSA/DSA, y así evitar el tener que ingresar una contraseña por medio del teclado.

Script de ejemplo:
###############################################
#!/bin/bash
echo "Comienzo del Script..."
sftp -i id_server_dsa root@server.domain.com <<EOF
get backupdeldia.tar.gz
bye
EOF
###############################################

-i: Para indicar que la conexión es mediante una clave RSA/DSA para que no pida contraseña.
id_server_dsa: La clave encriptada generada en el servidor.
root@server.domain.com: Usuario y Servidor.
<<EOF: Para indicarle el ingreso de comandos para el programa hasta que encuentre el "EOF".
get backupdeldia.tar.gz: Para descargar el archivo en cuestión.
bye: Pasa salir de SFTP
EOF: Para finalizar el ingreso de comandos en SFTP y vuelva a la consola.

Obviamente existen muchas cosas mas para hacer, y de varias maneras, este es un ejemplo mínimo para si estas buscando darte una idea de como hacerlo.

Adicionalmente aquí les dejo un Script real que hice para trabajar con un servidor SFTP del cual tenia que bajar los archivos de una carpeta (OUT), y luego borrarlos una vez descargados.

##########################################################
#Descarga de los archivos en la carpeta OUT.
date >> log/SFTP.log
echo "Comienza SFTP, se procede con la descarga" >> log/SFTP.log

sftp -oIdentityFile=id_server_dsa -oPort=21 root@server.domain.com <<EOF
cd OUT
get ./*
bye
EOF

RETVAL=$?
if [ $RETVAL -ne 0 ]
then
echo "Error en Download de los files" >> log/SFTP.log
exit 10
fi

date >> log/SFTP.log
echo "Finalizo SFTP, se procede con la descarga" >> log/SFTP.log

#Borrado de los archivos en el Servidor.
date >> log/SFTP.log
echo "Se eliminan los archivos en OUT" >> log/SFTP.log

sftp -oIdentityFile=id_server_dsa -oPort=21 root@server.domain.com <<EOF
cd OUT
rm ./*
bye
EOF

RETVAL=$?
if [ $RETVAL -ne 0 ]
then
echo "Error en borrado de los files descargados" >> log/SFTP.log
exit 20
fi

date >> log/SFTP.logecho "Se eliminaron los archivos en OUT" >> log/SFTP.log
##########################################################


Fuente original de la Imagen Aqui .

Saludos.


Escrito por

Espero que les haya gustado, ¡y no se olviden de comentar o sugerir futuros temas! Mi Twitter: ar_jorge1987





2 comentarios :

  1. Sencillamente util y a la vez ........ maravilloso para mi necesidad diaria de subir un archivo por sftp.

    ResponderBorrar
  2. Hola,
    tengo que hacer eso, pero hay algo: describes los pasos muy general,
    id_server_dsa: La clave encriptada generada en el servidor.

    como se genera la clave ????

    ResponderBorrar