Aspetta l'invio di errore di script: Spawn id exp4 non apre durante l'esecuzione

Aggiornamento: Codice di lavoro aggiunto qui per altri

CREDITS a: https://serverfault.com/users/30957/glenn-jackman

@Glenn mi dispiace! solo chiedere scusa e voglio dire!

Mi dispiace Glenn il tuo codice bisogno di pochi cambiamenti che sto aggiungendo qui e ho funzionato. Grazie a te! E mi dispiace per la mia maleducazione. Ecco il codice fisso per chiunque ne abbia bisogno. Puoi mettere l'IP in un file di text e quindi gatto dentro i server_addresses. come server_addresses = ('cat ip_list.txt') Nell'elenco IP aggiungere IP così 10.10.10.1 10.10.10.2 10.10.10.3

anche altri esempi se necessario. Esegui un command:

./test.sh "sudo cat /etc/hosts" 

Esegui più comandi

  ./test.sh "sudo cat /etc/hosts & /etc/init.d/network status" 

Ricerca e sostituzione

  ./test.sh "sed -i -e 's/SEARCH_STRING/REPLACE_STRING/g' /tmp/FileNAME.txt" 

Il codice completo:

  #!/bin/bash (( $# != 1 )) && { echo >&2 "Usage: $0 \"[COMMAND]\""; exit 1; } servers_addresses=( 10.10.10.10 192.168.10.1 ) for server_address in ${servers_addresses[@]}; do expect <<EOF set passwds { password1 password2 password3 } set i 0 spawn ssh -t root@$server_address "$*" expect { "Are you sure you want to continue connecting (yes/no)?" { send "yes\r"; exp_continue } "s password:" { send "[lindex \$passwds \$i]\r"; incr i; exp_continue } eof } EOF done 

Sto provando a eseguire questo script, ma avendo diversi errori quando sono stati modificati. Ecco il codice e l'output. Per favore aiuto.

Aggiornamenti alla fine del post con informazioni sul debug

  #!/bin/bash (( $# != 1 )) && { echo >&2 "Usage: $0 \"[COMMAND]\""; exit 1; } servers_addresses=(10.10.10.10 ) for server_address in ${servers_addresses[@]}; do expect <<EOF spawn ssh -t root@$server_address "$*" expect -timeout 2 "Are you sure you want to continue connecting (yes/no)?" { send "yes\n" } expect "s password:" { send "Correct_Password\n" } expect "s password:" { send "Wrong_Password_22222\n" } expect "s password:" { send "Wrong_Password_33333\n" } expect eof EOF done 

E l'output è come:

  goldberg188@Test-Server ~$ ./test.sh "sudo cat /etc/hosts" spawn ssh -t root@10.10.10.10 sudo cat /etc/hosts root@10.10.10.10's password: # Do not remove the following line, or various programs # that require network functionality will fail. 10.10.10.10 TEST-004 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 Connection to 10.10.10.10 closed. expect: spawn id exp4 not open while executing "expect "s password:" { send "Wrong_Password_33333\n" }" 

Se modifico come questo, allora l'output sarebbe un po 'diverso

  expect "s password:" { send "Wrong_Password_11111\n" } expect "s password:" { send "Correct_Password\n" } expect "s password:" { send "Wrong_Password_33333\n" } goldberg188@Test-Server ~$ ./test.sh "sudo cat /etc/hosts" spawn ssh -t root@10.10.10.10 sudo cat /etc/hosts root@10.10.10.10's password: # Do not remove the following line, or various programs # that require network functionality will fail. 10.10.10.10 TEST-004 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 Connection to 10.10.10.10 closed. expect: spawn id exp4 not open while executing "expect eof" 

E se la password corretta nella terza row non ha alcun errore affatto. Funziona bene su questo.

  expect "s password:" { send "Wrong_Password_11111\n" } expect "s password:" { send "Wrong_Password_22222\n" } expect "s password:" { send "Correct_Password\n" } goldberg188@Test-Server ~$ ./test.sh "sudo cat /etc/hosts" spawn ssh -t root@10.10.10.10 sudo cat /etc/hosts root@10.10.10.10's password: # Do not remove the following line, or various programs # that require network functionality will fail. 10.10.10.10 TEST-004 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 Connection to 10.10.10.10 closed. 

Ignorare le modifiche: so come eseguire due comandi contemporaneamente.

Aggiornamento: informazioni sul debug – modificato a

  exp_internal 1 expect "s password:" { send "Wrong_Password_11111\n" } expect "s password:" { send "Correct_Password\n" } expect "s password:" { send "Wrong_Password_33333\n" } 

Produzione:

  goldberg188@Test-Server ~$ ./test.sh "sudo cat /etc/host" spawn ssh -t root@10.10.10.10 sudo cat /etc/host root@10.10.10.10's password: expect: does "root@10.10.10.10's password: " (spawn_id exp4) match glob pattern "s password:"? yes expect: set expect_out(0,string) "s password:" expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) "root@10.10.10.10's password:" send: sending "Wrong_Password_11111\n" to { exp4 } expect: does " " (spawn_id exp4) match glob pattern "s password:"? no expect: does " \r\n" (spawn_id exp4) match glob pattern "s password:"? no Permission denied, please try again. root@10.10.10.10's password: expect: does " \r\nPermission denied, please try again.\r\r\nroot@10.10.10.10's password: " (spawn_id exp4) match glob pattern "s password:"? yes expect: set expect_out(0,string) "s password:" expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) " \r\nPermission denied, please try again.\r\r\nroot@10.10.10.10's password:" send: sending "Correct_Password\n" to { exp4 } expect: does " " (spawn_id exp4) match glob pattern "s password:"? no expect: does " \r\n" (spawn_id exp4) match glob pattern "s password:"? no cat: /etc/host: No such file or directory Connection to 10.10.10.10 closed. expect: does " \r\ncat: /etc/host: No such file or directory\r\r\nConnection to 10.10.10.10 closed.\r\r\n" (spawn_id exp4) match glob pattern "s password:"? no expect: read eof expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) " \r\ncat: /etc/host: No such file or directory\r\r\nConnection to 10.10.10.10 closed.\r\r\n" expect: spawn id exp4 not open while executing "expect eof" 

  • Gancio del filesystem Unix
  • È ansible aumentare la velocità con cui il ntpd aggiorna l'orologio del sistema?
  • Come faccio a determinare la dimensione del block di una partizione ext3 su Linux?
  • quanti account utente possono un host OS di tipo unix?
  • Fsck o non fsck dopo 180 giorni
  • Come si connette a un server dietro un proxy di socks5 tramite SSH su mac / linux?
  • lunga password SSH vs chiavi SSH
  • Qual è il modo migliore per fornire una password per automatizzare un backup?
  • 2 Solutions collect form web for “Aspetta l'invio di errore di script: Spawn id exp4 non apre durante l'esecuzione”

    Supponendo che non si sta inviando una password errata allo scopo, utilizzare exp_continue come un costrutto loop:

     expect <<EOF set passwds {foo bar baz} set i 0 spawn ssh -t root@$server_address "$*" expect { "continue connecting (yes/no)?" { send "yes\r"; exp_continue } " password: " { send "[lindex $passwds $i]\r"; incr i; exp_continue } eof } EOF 

    CREDITS a: https://serverfault.com/users/30957/glenn-jackman

    @Glenn mi dispiace! solo chiedere scusa e voglio dire!

    Mi dispiace Glenn il tuo codice bisogno di pochi cambiamenti che sto aggiungendo qui e ho funzionato. Grazie a te! E mi dispiace per la mia maleducazione. Ecco il codice fisso per chiunque ne abbia bisogno. Puoi mettere l'IP in un file di text e quindi gatto dentro i server_addresses. come server_addresses = ('cat ip_list.txt') Nell'elenco IP aggiungere IP così 10.10.10.1 10.10.10.2 10.10.10.3

    anche altri esempi se necessario. Esegui un command:

      ./test.sh "sudo cat /etc/hosts" 

    Esegui più comandi

      ./test.sh "sudo cat /etc/hosts & /etc/init.d/network status" 

    Ricerca e sostituzione

      ./test.sh "sed -i -e 's/SEARCH_STRING/REPLACE_STRING/g' /tmp/FileNAME.txt" 

    Il codice completo:

      #!/bin/bash (( $# != 1 )) && { echo >&2 "Usage: $0 \"[COMMAND]\""; exit 1; } servers_addresses=( 10.10.10.10 192.168.10.1 ) for server_address in ${servers_addresses[@]}; do expect <<EOF set passwds { password1 password2 password3 } set i 0 spawn ssh -t root@$server_address "$*" expect { "Are you sure you want to continue connecting (yes/no)?" { send "yes\r"; exp_continue } "s password:" { send "[lindex \$passwds \$i]\r"; incr i; exp_continue } eof } EOF done 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.