EXPECT- Script para ejecutar comandos en forma remota.-

El siguiente ejemplo es un SCRIPT realizado con EXPECT para tomarlo como base para ejecutar script remotos y mostrar el resultado por pantalla. Suponiendo que al script lo grabamos con el nombre remoto.sh, para ejecutarlo sería :

bash remoto.sh «ps -fea | grep componente»

Entre las comillas se debe ingresar el comando que se desee ejecutar en el servidor remoto.-

Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

10 respuestas a EXPECT- Script para ejecutar comandos en forma remota.-

  1. Francisco dijo:

    Excelente reseña funciona perfecto lo utilice para realizar monitoreo sobre equipos.

  2. Jaime dijo:

    asi es funciona excelente.

  3. Javier dijo:

    Hola, buen aporte, yo utilice tu shell pero para conectarme a un SFTP, pero no logro ejecutar el comando get para copiar los archivos del servidor remoto a mi servidor local, ¿me pudieras hacer favor de indicarme como se puede hacer?, ya intente de varias formas, pero no lo he logrado. Si se conecta al server remoto.
    VAR=$(expect -c »
    spawn sftp -o «BatchMode=no» $USER@$HOST «:/ruta/»
    expect -nocase \»?assword:\»
    send — \»$PASS\r\»
    send — \»get archivo.txt\r\»
    send — \»\r\»
    expect eof

    «)
    echo «===============»
    echo «$VAR»
    Saludos.

  4. Angel dijo:

    Necesitas indicarle en el expect que prompt aparece cuando envias el password,
    asi lo probe y funciono, tambien le quite la opcion “BatchMode=no” porque si espera un usuario y password

    spawn sftp $USER@$HOST
    match_max 100000
    expect \»?assword:\»
    send — \»$PASS\r\»
    expect \»sftp>\» <—el expect espera este prompt y luego envia el get
    send — \"get archivo.txt\r\"
    #send — \"\r\"
    expect eof
    ")
    echo "==============="
    echo "$VAR"

  5. Angel dijo:

    Necesitas indicarle en el expect que prompt aparece cuando envias el password,
    asi lo probe y funciono, tambien le quite la opcion “BatchMode=no” porque si espera un usuario y password

    spawn sftp $USER@$HOST
    match_max 100000
    expect \»?assword:\»
    send — \»$PASS\r\»
    expect \»sftp>\» <—el expect espera este prompt y luego envia el get
    send — \"get archivo.txt\r\"
    #send — \"\r\"
    expect eof
    ")
    echo "==============="
    echo "$VAR"

  6. Angel dijo:

    o asi tambien te funciona

    #!/bin/bash
    HOST=»192.168.1.65″
    USER=»amongus»
    PASS=»pass1″
    CMD=$@
    VAR=$(expect -c »
    spawn sftp $USER@$HOST
    match_max 100000
    expect \»?assword:\»
    send — \»$PASS\r\»
    expect \»sftp>\»
    send — \»$CMD \r\»
    #send — \»\r\»
    expect eof
    «)
    echo «===============»
    echo «$VAR»

    y lo ejecutas con

    bash remoto.sh «get archivo.txt»

  7. Anónimo dijo:

    Como puedo dejar abierta la conexion?

    Se conecta al servidor, pero necesito que me de el acceso, no solo que ejecute un comando, sino que automatice la conexion a varios servidores

  8. Jey dijo:

    Me podrías mostrar como agregar varias conexiones a servidores? Y mantenerlas abiertas, quiero automatizar la conexión a varios servidores

    • La forma en que lo hago, cuando necesito trabajar en varios servidores es la siguiente:
      En un archivo (servi.txt) pongo en una lista todos los servidores a los que deseo conectarme (uno por línea).
      El primer script es el bash; lee el archivo de servidores y ejecuta el segundo Srcipt EXPECT pasándole como parámetros el servidor, usuario y password. Cuando finalizo de trabajar en uno; salgo con el comando “exit” y automáticamente me conecta al siguiente servidor. Esto hasta que lee completamente el archivo de servidores :
      Espero sea de utilidad.
      ———————————————————————————————-
      #!/bin/bash
      servi=»/usr01/servi.txt»
      for ser in $(cat $servi) ; do
      echo «Conectado a $ser»
      /usr/local/bin/expect /usr01/conecta2.exp $ser usuario password
      echo «»
      done
      ————————————————————————————————
      #!/usr/local/bin/expect
      set ip [lindex $argv 0]
      set usuario [lindex $argv 1]
      set contrasena [lindex $argv 2]
      set timeout 3
      log_user 0
      spawn ssh -o StrictHostKeyChecking=no $usuario@$ip
      expect «*?assword:*»
      send «$contrasena\r»
      expect «*»
      interact

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *