Você está perdendo exp_continue
no bloco de senha. Isso essencialmente voltará ao início do comando expect para que você possa esperar por um dos outros padrões.
Mas, falando sério, use a autenticação por chave ssh. É muito mais fácil.
Eu escrevi um programa esperado (veja abaixo :), onde estou tentando copiar arquivos para a máquina remota. Enquanto scp
'ing, se eu fornecer senha errada, minha expectativa é de segunda condição será cumprida e imprimir o erro e o programa será encerrado.
No entanto, o que acabou acontecendo é que, independentemente de eu fornecer a senha correta ou não, ele está cumprindo todas as condições e erros do programa.
Estou fazendo algo errado aqui? Qualquer ajuda seria muito apreciada.
spawn scp -p -o StrictHostKeyChecking=no $x $y ${toolpath}/cmd.sh $user@$ip:/x/home/$user
while (1) {
expect {
"?assword:" {
send_log "Password entered for scp'ing to $ip\n"
send "$password\n"
}
"Permission denied, please try again" {
send_user "$ip : You have entered wrong password, Permission denied\n"
exit 1
}
"timeout" {
send_user "$ip : Failed to scp - timed out\n"
exit 1
}
"lost connection" {
send_user "$ip : Connection lost\n"
exit 1
}
}
}
Você está perdendo exp_continue
no bloco de senha. Isso essencialmente voltará ao início do comando expect para que você possa esperar por um dos outros padrões.
Mas, falando sério, use a autenticação por chave ssh. É muito mais fácil.
Tags expect