domingo, 14 de septiembre de 2014

Script en Bash para ejecutar un comando remoto mediante SSH

Estamos acostumbrados a ejecutar de manera muy simple comandos en nuestra máquina local y si esto fuera tambien fácil de hacer respecto a otra máquina remota. Veamoslo con un sencillo script en bash (nota: necesitas tener “expect” instalado en tu máquina local). 



Crea un script “execute.sh” con el siguiente contenido:
 


#!/bin/bash
HOST="aqui_pon_la_maquina_remota"
USER="aqui_pon_el_usuario_remoto"
PASS="aqui_pon_el_password_remoto"
CMD=$@
VAR=$(expect -c "
spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD
match_max 100000
expect "*?assword:*"
send -- "$PASSr"
send -- "r"
expect eof
"
echo "==============="
echo "$VAR"


Y listo!, dale permisos de ejecución 

chmod +x execute.sh 

y ya puedes emplearlo, por ejemplo con: 

./execute.sh “ls -l” 

Te mostrara un listado de archivos pero de la maquina remota. 
Genial, para automatizar algunas tareillas. 

Ya de paso y basandome en el ejemplo os dejo los scripts “download.sh” y “upload.sh” que acabo de implementar y pueden usarse para subir y bajar ficheros al servidor mediante scp (Secure Copy).
 

download.sh 

#!/bin/bash

HOST="aqui_servidor"
USER="aqui_usuario"
PASS="aqui_password"
CMD=$@

VAR=$(expect -c "
spawn scp -r $USER@$HOST:$CMD .
match_max 100000
expect "*?assword:*"
send -- "$PASSr"
send -- "r"
expect eof
"
echo "==============="
echo "$VAR"


upload.sh 


#!/bin/bash

HOST="aqui_servidor"
USER="aqui_usuario"
PASS="aqui_password"
FICHEROS=$1
DIRECTORIO_REMOTO=$2

VAR=$(expect -c "
spawn scp -r $FICHEROS $USER@$HOST:$DIRECTORIO_REMOTO
match_max 100000
expect "*?assword:*"
send -- "$PASSr"
send -- "r"
expect eof
"
echo "==============="
echo "$VAR"


OJO, hay que tener en cuenta que queda expuesto el usuario y la contraseña para loguearse en la maquina remota. 

"La carita se reemplaza con " ) sin el espacio en el medio" 

No he tenido tiempo de probarlo, esta noche lo pruebo y les comento. 

No hay comentarios:

Publicar un comentario