Use expect_before
para corresponder à pergunta "host desconhecido" apenas se vier antes do prompt de comando:
#!/usr/bin/expect
spawn ssh user@domain
expect_before "*(yes/no)?" {
send "yes\r"
}
expect "*# "
interact
Eu tenho o seguinte script de espera que adiciona um host conhecido se um host conhecido não existir.
#!/usr/bin/expect
spawn ssh user@domain "cd /home/user"
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\r"
interact
O script funciona bem na primeira vez que eu ssh em um dispositivo, no entanto, se eu ssh em um dispositivo por um enésimo + 1 vez, ele gera um erro
send: spawn id exp6 not open
while executing
"send "yes\r""
(file "./testing_spawn.sh" line 4)
presumivelmente porque continua a esperar que a string Are you sure you want to continue connecting (yes/no)?
Como posso dizer ao script para apenas interact
se essa mensagem não aparecer?
Use expect_before
para corresponder à pergunta "host desconhecido" apenas se vier antes do prompt de comando:
#!/usr/bin/expect
spawn ssh user@domain
expect_before "*(yes/no)?" {
send "yes\r"
}
expect "*# "
interact
tente isto:
#./test.exp 1.1.1.1
test.exp
#!/usr/bin/expect -f
set ip [lindex $argv 0]
spawn ssh -q $ip
expect {
timeout { send_user "\nFailed\n"; exit 1 }
eof { send_user "\nSSH failure for $ip\n"; exit 1 }
"Password:" {
send "password\n"
}
"*(yes/no)?*" {
send "yes\n"
interact
}
"*#" {
interact
}
}
Tags linux