Necesito escribir un script que se ejecute en una PC con Centos 7 y se conecte a otra PC con Centos 7 usando ssh, ejecute un comando de consola, por ejemplo «ls -la» y guarde el resultado del mismo en un archivo para poder analizarlo más tarde.

He escrito el siguiente script EXPECT:

ssh_connection.exp:

#!/usr/bin/expect -f set timeout 120 spawn ssh [email protected] expect "assword:" send "PASSWORD\r" expect "prompt#" sleep 5 puts "Executing ls -la" send "ls -la\r" sleep 10 puts "Executing ps -af" puts "ps -af\r" sleep 10 puts "Closing the ssh session\r" send "exit\r" 

Este script se conecta correctamente a través de ssh a la máquina con IP = 129.0.0.10 y muestra en pantalla los mensajes que aparece en «put»: Ejecutando ls -la Ejecutando ps -af Cerrando la sesión ssh

Sin embargo, no muestra el resultado de ejecutar los comandos que envío con send:

ls -la ps -af 

¿Qué le pasa a este script?

¿Cómo puedo hacer que la salida de los comandos anteriores se guarde en un archivo para poder analizarla luego con un bash script o un programa en C?

Comentarios

  • Simplemente use un sta comando ndard ssh con claves ssh y un heredoc
  • Parece que está complicando demasiado las cosas. No necesita usar la función de esperar para automatizar cosas a través de ssh.
  • ¿Intentó un comando como spawn ssh [email protected] ls -la>Ls?
  • Ejecute su script con expect -d ssh_connection.exp y vea dónde están los problemas. Lo primero que recomiendo ' d es reemplazar todos los durmientes con expect "prompt#"

Responder

No es necesario utilizar expect para hacer esto. El ssh puede tomar argumentos adicionales de los comandos que desea ejecutar a través de la conexión SSH.

Paso # 1

Configure un par de claves SSH (busque en Google) y luego copie SSH al servidor remoto. Para hacer esto, recomiendo usar ssh-copy-id. Vea mi respuesta a este U & LQ & A titulado: Cómo copiar correctamente claves privadas de servidores remotos a mi máquina local para poder conectarme usando ssh .

Paso # 2

Ahora con la capacidad de SSH a un servidor en su lugar usando una clave , su problema anterior se convierte en esto:

$ ssh [email protected] "ls -la; ps -af" 

Puede ponerse elegante y usar aquí documentos (heredocs . here-docs) para mejorar aún más esta técnica.

$ ssh [email protected] <<EOF > ls -la > ps -af > EOF 

o poner los comandos en un archivo y pasarlos a ssh:

$ ssh [email protected] < my.cmds 

Comentarios

Responder

Gracias,

He modificado mi script reemplazando la línea:

spawn ssh [email protected]

con este otro, como me dices:

spawn ssh [email protected] «ls -la; ps -af»

Ahora veo la salida de comandos en la pantalla y puedo redirigir a un archivo.

A continuación, intenté adaptar este script para ejecutar un comando en otra máquina que es un conmutador tipo Cisco (no es Cisco, pero es compatible).

El script con el que me conecto al switch usando ssh es:

** #! / usr / bin / esperan -f

set timeout 120

spawn ssh [email protected] «mostrar vlan 500»

esperar «assword:»

enviar «PASSWORD \ r»

esperar «prompt # «

sleep 5

pone» Cerrando la sesión ssh \ r «

enviar» exit \ r «**

Esto no funciona en el conmutador y aparece este error:

spawn ssh [email protected] show vlan 501

[email protected] «s contraseña:

imish: opción inválida -» c «

Pruebe` imish –help «para obtener más información.

send: spawn id exp6 not open

while executing 

«send» exit \ r «»

(file "./ssh_script_v3.exp" line 7) 

Así que debo usar el script de espera que envía el comando usando «enviar»:

! / usr / bin / esperan

generar ssh [email protected]

esperar «assword:»

enviar «usuario \ r»

esperar «>»

dormir 5

enviar «sh vlan 500 \ r»

dormir 5

enviar «salir \ r»

Ahora no obtengo ningún error, pero no se muestra nada en la pantalla.

He leído que esto sucede porque los sistemas Linux y UNIX almacenan automáticamente su salida cuando se ejecutan de forma no interactiva. Creo que Expect puede hacer que los programas piensen que se están ejecutando de forma interactiva mediante «unbuffer», pero no sé cómo usar «unbuffer» con «send». Mis intentos de hacer esto, no funcionan.

Deja una respuesta

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