2012-01-11 12 views
6

que escribir la siguiente secuencia de comandos de esperar el fin de automatizar inicio de sesión ssh a la máquina Linux a distancia y ejecutar el comando "archivo /etc/APP_VERSION.txt gato"esperan guión + cómo hacer caso omiso de las cadenas, si no aparece

En algún momento me no preguntó de comando ssh sobre-

"Are you sure you want to continue connecting (yes/no)?" 

Así que en este caso el primer esperan todavía esperando la cadena "(sí/no)?" - :(

y no continuar con la segunda esperan - "contraseña:"

cómo resolver esto,

quiero decir que si la línea "¿Seguro que desea continuar la conexión (sí? ?/no) "no Consta en ssh

entonces tenemos que ir a la siguiente esperar 'contraseña:' ¿pero cómo hacer esto

Remark1 - en el caso de la pregunta" ¿seguro que ¿Desea continuar conectando (sí/no)? ", aparece luego el espera que el script funcione bien sin ningún problema .

Remark2 - No puede utilizar el valor de tiempo de espera positiva (como tiempo de espera de 10) porque ssh en sí tiene retraso

. . . .

Mi esperan guión: (esto es esperar que parte de mi ksh)

. 
    . 
    . 

    APP_MACHINE=172.12.6.190 


    set timeout -1 
    spawn ssh $APP_MACHINE 
     expect { 
       "(Are you sure you want to continue connecting yes/no)?" 
           { send "yes\r" } 
       } 
     expect password:  {send PASS123\r} 
    expect > {send "cat /etc/APP_VERSION.txt\r"} 
    expect > {send exit\r} 
    expect eof 

. 
. 
. 

. . . . .

ejemplo de ssh de mi máquina Linux

ssh APP_MACHINE 
    The authenticity of host 'APP_MACHINE (172.12.6.190)' can't be established. 
    RSA key fingerprint is 1e:8a:3d:b3:e2:8c:f6:d6:1b:16:65:64:23:95:19:7b. 
    Are you sure you want to continue connecting (yes/no)? 

Respuesta

7

Establecer un tiempo de espera

conjunto tiempo de espera de 10

esperará a que la línea de espera durante 10 segundos, y luego seguir adelante a la siguiente línea en el guión si no se recibe dentro del tiempo de espera especificado.

Referencia http://linuxshellaccount.blogspot.com/2008/01/taking-look-at-expect-on-linux-and-unix.html

ACTUALIZACIÓN: Si un tiempo de espera no es una solución aceptable, se podría tratar de usar una lista de respuestas alternativas para impulsar el guión hacia adelante.

expect { 
"(Are you sure you want to continue connecting yes/no)?" { send "yes\r"; exp_continue } 
password:            {send PASS123\r; exp_continue} 
} 
+0

Lo siento, no puedo usarlo porque hace tiempo que ssh tiene conexión de tiempo, a veces es 5 o 10 segundos, ¿quién sabe? - ¡No es una buena solución para mí, lo siento otra vez, debe ser otra solución! –

+0

De todos modos, esto no es una buena idea porque mi APLICACIÓN necesita ejecutarse rápidamente sin demora desde el script esperado –

+0

Agrego la cadena exp_continue como se muestra aquí pero aún está atascada. –

0

Es posible que desee utilizar el módulo pexpect para Python para hacer esto, ya que le puede proporcionar con algo así como un caso :)

Para más detalles, ver: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/

+0

thx felix sun, pero prefiero resolverlo en primer lugar porque tengo script de esperar en mi guión de shell, así que no quiero perder tiempo para traducirlo a pilón, pero su idea es buena para un bacalao nuevo –

7

Cuando generas SSH haz esto:

spawn ssh -o "StrictHostKeyChecking no" "$user\@ip" 
Cuestiones relacionadas