Sencillo 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 -- \"$PASS\r\"
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.

Actualizado | 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.

#!/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 -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
#!/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 -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"

Gracias a | nixCraft

34 Respuestas to “Sencillo script en Bash para ejecutar un comando remoto mediante SSH”


  1. 2 Inukaze agosto 3, 2010 a las 4:20 pm

    Piwi , como harias un mini-script , por ejemplo «proxy.sh», para colocarlo en la carperta «/usr/bin» con permisos de ejecucion establecido

    Que este, te deje colocarle , la direccion o nombre de HOST del Proxy y el puerto
    ya sea

    Direccion :172.32.1.1
    Puerto : 3128

    o en su defecto asi

    Direccion & Puerto : 172.32.1.1:3128

    Haciendo que esos datos sean introducidos por el usuario , es usando READ ???
    para luego que los use

    export http_proxy=»direccion»:»puerto»
    export ftp_proxy=»direccion»:»puerto»

    Porque estoy arto de lanzar la linea en Slackware en el trabajo xD.

    # Establecer proxy (http & ftp) desde la terminal :
    export http_proxy=http://172.32.1.1:3128 && export ftp_proxy=ftp://172.32.1.1:3128

    y en caso de introducir letras , que devuelva un mensaje que solo se permiten numeros xD 😛 ????

    Suena muy complejo para lo sencillo que lo quiero ???

  2. 4 luis octubre 18, 2010 a las 2:58 am

    Hola digamos q quiero ejecutar un script de manera remota, es decir quiere ejecutar un script: actualizar.sh, como le haria para que se ejecute usando tu script de conexion ssh, no se si me explique? de todos modos gracias y gracias por el script

    • 5 superpiwi octubre 18, 2010 a las 7:19 am

      Tendrias que tener el script ya subido a remoto y con permisos de ejecución, para ello antes podrias por ejemplo subirlo via ftp.
      una vez en remoto, ya puedes ejecutarlo en plan:

      /ruta/al/script/script.sh

      • 6 Luigi diciembre 13, 2010 a las 2:31 pm

        Primero muchas gracias por el script. Soy muy nuevo en esto de los script y tengo una duda.

        Una vez que ejecuto el script este se conecta y automaticamente sale, yo necesito quedarme conectado al servidor ssh.

        Como podria hacerlo?

        Espero haber sido claro

        Muchas gracias.

  3. 7 X3MBoy marzo 21, 2011 a las 7:14 pm

    Muchas gracias por el script, lo estaba necesitando ahora. Creo que me faltaba el expect y el send, pues tenía el problema de la solicitud del password, y pues no tengo permisos sobre el servidor ssh para crear certificados de origen.

    Muchas gracias de nuevo.

  4. 9 David abril 28, 2011 a las 1:59 pm

    Muy bueno, muy útil. Gracias por compartir

  5. 10 Cesar octubre 17, 2011 a las 3:29 pm

    Estoy armando un script parecido pero se me complica porque por temas de seguridad el acceso root directamente esta restringido y primero tengo que entrar con usuario normal para luego subir con ‘su’ a root, no se como hacer para indicar en el script que suba a root. pf me podrias dar alguna idea? gracias

  6. 11 elistraus noviembre 4, 2011 a las 2:36 pm

    Hola!!
    De verdad me sivió de mucho el scripts, te pasaste!!

    Tengo una pregunta como lo puedo hacer para que me guarde en un archivo log cosas de como si la conexion falla o si la copia tuvo exito,,,

    Saludos

  7. 12 polochepuaolo diciembre 19, 2011 a las 5:55 pm

    Holas disculpa pero cuando ingreso a mi servidor por ssh y ejecuto comandos que quiero permanescan activos aun mas alla de cuando yo cierre la ventana de coneccion como podria hacer eso?
    lo que hago es lo siguiente me conecto a uns erver ubuntu desde windows con putty ejecuto comandos que quiero se mantengan en ejecucion despues de cierre la ventana de putty se puede hacer eso?

    gracia de antmano

  8. 13 Gonzalo junio 11, 2012 a las 1:27 pm

    Muy bueno el script, lo voy a probar.

    Estoy haciendo un sistemita basado en bash para habilitar/deshabilitar el acceso remoto a servidores basado en permisos de usuario para mi oficina.

    La difucultad es que el area de soporte debe acceder a todos los servidores pero el area de desarrollo no, y es imposible acordarse la ip y el password de 100 clientes. Ademas el tecnico de guardia debe poder acceder desde su casa, por lo que intentamos que deba bajarse la menor cantidad de programas posibles.

    Este script nos viene de 10, ya que puede estar almacenado en un server de la oficina (almacenando los passwords en una base de datos) y el tecnico de guardia solo debe tener los certificados de la VPN de la oficina.

    Muy buen aporte!!!!

  9. 14 JuanKa julio 9, 2012 a las 10:23 pm

    Gracias por informarme sobre expect. Yo necesito automatizar la conexión a unas máquinas que tienen consola propia (Osmon).
    Pero este script falla:
    syntax error at line 6: `VAR=$’ unexpected
    No encuentro el error ¿?

  10. 15 Gonzalo septiembre 2, 2012 a las 8:56 pm

    No se que es osmon y no encontre nada en google, pero parece que no te reconoce el simbolo $ en la declaracion de la variable VAR en la linea 6. En que sistema operativoestas corriendo el script???

  11. 16 JESUS ROMERO octubre 3, 2012 a las 8:18 pm

    hola buenas tardes tengo un problema al ejecutar este script

    #!/bin/bash

    HOST=»69.73.173.232″
    USER=»elexis»
    PASS=»*********»
    FICHEROS=»/home/elexis/public_html/nuevo2″
    DIRECTORIO_REMOTO=»/home/elexis/public_html/banner_index.fla»

    VAR=$(expect -c »
    spawn scp -rp elexis@69.73.173.232:/home/elexis/public_html/banner_index.fla /home/elexis/public_html/nuevo2
    match_max 100000
    expect \»*?assword:*\»
    send — \»$PASS\r\»
    send — \»\r\»
    expect eof
    «)
    echo «===============»
    echo «$VAR»

    elexis@leyex.com [~]# chmod +x descargar.sh
    elexis@leyex.com [~]# sh descargar.sh

    El resultado es este nose porque. de antemano muchas gracias por su ayuda

    : command not found
    : command not found
    The system has no more ptys. Ask your system administrator to create more.
    while executing
    «spawn scp -rp elexis@69.73.173.232:/home/elexis/public_html/banner_index.fla /h»me/elexis/public_html/nuevo2
    ===============
    spawn scp -rp elexis@69.73.173.232:/home/elexis/public_html/banner_index.fla /home/elexis/public_html/nuevo2

  12. 18 Rafa enero 10, 2013 a las 7:44 pm

    Hola. He intentado modificar el script para utilizarlo con rsync y hacer backup de una carpeta remota pero no funciona correctamente. Si lo uso con una carpeta de prueba, pequeña, va bien pero con la carpeta real de trabajo que tiene algunos GB, tras unos segundos se corta el proceso con lo que el backup no es completo.

    ¿Alguien sabría a qué se debe?

    Muchas gracias.

    #!/bin/bash

    HOST=»misitio»
    USER=»miusuario»
    PASS=»micontraseña»

    VAR=$(expect -c »
    spawn rsync -avz -e ssh $USER@$HOST:~/mdl ./Backup
    match_max 100000
    expect \»*?assword:*\»
    send — \»$PASS\r\»
    send — \»\r\»
    expect eof
    «)
    echo «===============»
    echo «$VAR»

    • 19 Rafa enero 10, 2013 a las 8:17 pm

      Por el enlace http://linux.die.net/man/8/spawn entiendo que spawn solo puede funcionar durante unos segundos pero no localizo la forma de aumentar ese tiempo

    • 20 Luis marzo 15, 2013 a las 4:26 pm

      yo te recomiendo lo siguiente a mi me paso (hace algún tiempo) y lo solucione asi:
      1: Guardar un escript donde hace el proceso (backup) » la maquina local»
      2.- Ejecutarlo via remota con algo asi:
      #!/bin/bash

      HOST=”misitio”
      USER=”miusuario”
      PASS=”micontraseña”
      «mi script para backup»
      :::::::::::::::::::::::::::::::::
      espero que te sirva, y que me haya explicado, saludos 😉

  13. 21 Daniel septiembre 20, 2013 a las 9:05 pm

    amigo la manera de pasar las variables en el upload seria ./script.sh archivo.pdf /data/C1205 y ahora si quiero hacer una busqueda de un directorio se podra implementar?

  14. 22 Gabriel junio 6, 2014 a las 8:43 pm

    estimado como Puedo Hacer PAra Que mi servidor Proxy con Open suse y Squid se ejecute digamos cada hora lo siguiente :

    cd /etc/init.d

    y luego

    ./firewall

    ya que cada vez que hay un corte de fluido electrico tengo que ingresar via putty y ejecutarlo agradecere su ayuda al respecto

  15. 23 ana_gaby enero 20, 2015 a las 6:45 pm

    este script me sirve para transferir archivos de ubuntu a enlace ftp y que variables tendría que cambiar por su respuesta inmediata gracias

  16. 24 Claudia febrero 27, 2015 a las 6:57 pm

    Hola, solicito de ayuda para ver de que manera puedo enviar una archivo ascci desde oracle/forms a otro servidor usando el FTP.

  17. 25 jesus Amado abril 29, 2015 a las 3:40 pm

    buenas, como haria para responder preguntas de un comando que se ejecuta en un shell script al iniciar seccion sabiendo que el mismo tiene que responderse ingresandolo por teclado y yo necesito que tome la respuestas de una variable guardada en un txt por ejemplo

  18. 26 Benja agosto 7, 2015 a las 3:54 pm

    Hola, como seria un script para eliminar archivos mayores a seis meses de una determinada ruta de una maquina remota, desde mi maquina local.

  19. 28 OSCAR EDUARDO GONZALEZ PADILLA noviembre 15, 2017 a las 12:23 am

    Que tal Superpiwi, oye tengo un problema con un script igual al tuyo, el problema es el que file que quiero pasar es algo grande y no lo copia completo, sera problema o factor el match_max? Ya lo he crecido y sigue pasando lo mismo, no hace la copia completa, el tamaño del fle es de:

    521M

    Alguna solucion para este problema?

    Gracias y saludos….

  20. 30 HPK junio 11, 2019 a las 6:55 pm

    Buenas, me gustaría saber como podría ejecutar un comando desde otros dos. Por ejemplo: Un windows(con linux subsystem) a otros dos linux en mi caso uso raspian. Gracias de ante mano


  1. 1 Script para correr comandos remotamente via SSH | Tux Files Trackback en agosto 8, 2010 a las 3:50 am
  2. 2 Lo mejor de mi RSS del 2 al 8 de agosto | Linux Hispano Trackback en agosto 8, 2010 a las 9:07 pm
  3. 3 speed booster Trackback en febrero 27, 2015 a las 10:56 pm
  4. 4 buy hcg weight Loss uk Trackback en marzo 17, 2015 a las 1:53 am

Replica a polochepuaolo Cancelar la respuesta







¿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

Archivos

agosto 2010
L M X J V S D
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Blog Stats

  • 31.397.877 hits