aspettatevi + come identificare se si aspettano pause perché il tempo fuori?

L'objective del seguente script semplice aspettarsi è quello di get il nome hostname sulla macchina remota

A volte si aspetta che il script non riesca a eseguire ssh a $ IP_ADDRESS (perché la macchina remota non è triggers, ecc)

quindi in questo caso lo script di aspettarsi romperà dopo 10 secondi (timeout 10), questo è giusto ma ……

Ci sono due opzioni

  1. L'attesa di script eseguire ssh con successo e eseguire il command hostname sulla macchina remota
  2. Aspetta l'interruzione di script perché il timeout era di 10 secondi

Su entrambi i casi si aspetta l'output

  • in caso di ssh si aspetta successo si romperà dopo 0.5-1 secondo ma in caso di ssh difettoso si romperà dopo 10 secondi

ma non so se prevedere che lo script eseguire ssh con successo o no?

è ansible identificare il process di timeout? o per verificare che le aspettative siano terminate perché timeout?

Notare la mia versione di macchina Linux – red hat 5.1

Aspettatevi script

[TestLinux]# get_host_name_on_remote_machine=`cat << EOF > set timeout 10 > spawn ssh $IP_ADDRESS > expect { > ")?" { send "yes\r" ; exp_continue } > > word: {send $PASS\r} > } > expect > {send "hostname\r"} > expect > {send exit\r} > expect eof > EOF` 

Esempio nel caso in cui non abbiamo connessione all'host remoto

  [TestLinux]# expect -c "$get_host_name_on_remote_machine" spawn ssh 10.17.180.23 [TestLinux]# echo $? 0 

2 Solutions collect form web for “aspettatevi + come identificare se si aspettano pause perché il tempo fuori?”

si può aspettare timeout, alcune versioni richiedono -reime come -regex per testare l'invocazione del timeout.

ci si aspetta che l'affermazione potrebbe diventare

 expect { ")?" { send "yes\r" ; exp_continue } word: { send $PASS\r} timeout { puts "failed to SSH" } } 

So che non è esattamente quello che hai chiesto, ma vorrei offrire un'alternativa. Utilizzare i tasti ssh invece che le password e il bash scripting invece di aspettare:

 output=$(ssh -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no $IP_ADDRESS "hostname") if [ $? -eq 255 ]; then # Some error occured while attempting to connect. else # Success! fi 

Questo non ti dice esplicitamente che c'era un timeout ma non è riuscito a accedere con una chiave privata, ecc., Ma batte la scrittura Expect.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.