2012-01-11 8 views
6

scrivo quanto segue si aspettano di script per automatizzare login ssh alla macchina Linux remota ed eseguire il comando "file di /etc/APP_VERSION.txt cat"aspettano lo script + come ignorare le stringhe se non appare

A volte mi non ho chiesto di comando ssh su-

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

Quindi, in questo caso il primo si aspettano ancora attendere per la stringa "(sì/no)?" - :(

E non continuare con il secondo si aspettano - "password:"

come risolvere questo,

Voglio dire, se la linea "Sei sicuro di voler continuare la connessione (sì? ?/no) " Is not compare da ssh

Poi si deve andare alla prossima aspettarsi 'password:', ma come fare questo

Remark1 - nella questione caso" Sei certo vuoi continuare a connetterti (sì/no)? ", appare allora il aspetto che lo script funzioni bene senza problemi .

Remark2 - Non posso usare timeout valore positivo (come timeout 10), perché ssh in se ha ritardo

. . . .

la mia aspettano script: (questo si aspettano fa parte del mio script 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 

. 
. 
. 

. . . . .

esempio di ssh dalla mia macchina 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)? 

risposta

7

Impostare un timeout

timeout impostato 10

attenderà la linea di attesa per 10 secondi, e poi andare avanti alla riga successiva nello script se non è stata ricevuta entro il timeout specificato.

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

UPDATE: Se un timeout non è una soluzione accettabile si potrebbe provare a utilizzare un elenco di risposte alternative per guidare lo script in avanti.

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

Mi spiace non posso usarlo perché un po 'di tempo ssh ha esso stesso avere la connessione di tempo - a volte il suo 5 o 10 secondi chi lo sa? - La sua non è una buona soluzione per me, mi dispiace ancora, deve essere un'altra soluzione !!! –

+0

Comunque questa non è una buona idea perché la mia APP ha bisogno di correre velocemente senza alcun ritardo dallo script previsto –

+0

Aggiungo la stringa exp_continue come viene visualizzata qui ma è ancora bloccata. –

0

Si consiglia di utilizzare il modulo pexpect per Python per fare questo, come si può fornire con qualcosa di simile a un caso :)

Per maggiori dettagli, si veda: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/

+0

thx felix sun, ma preferisco prima risolverlo nell'aspettativa perché ho previsto uno script nel mio script di shell quindi non voglio passare il tempo necessario per tradurlo in pilone ma la tua idea è buona per il nuovo scratch cod –

7

Quando si genera SSH fare questo:

spawn ssh -o "StrictHostKeyChecking no" "$user\@ip" 
Problemi correlati