Precisa de modificações no meu script de espera

1

Eu tenho um script expect que executa um SSH em uma lista de servidores com as credenciais mencionadas no script. Ele não está emitindo nenhum erro quando não consegue executar o SSH em um determinado servidor e continua com o próximo servidor na lista. Eu quero que o script deixe-me saber quando é incapaz de SSH com a senha dada. Quais mudanças devem ser feitas no script para que isso seja feito?

O primeiro script é um script de shell que chama o script de espera

#!/usr/bin/ksh
for host_name in 'cat list'
do
    /home/user1/ssh_script $host_name
done

#!/usr/local/bin/expect -f
set timeout 1
set host_name [lindex $argv 0]
spawn ssh -q -o StrictHostKeyChecking=no "user1\@$host_name"
expect "*assword:"
send "abcd@123\r";
expect "$\r"
puts "user1 loggedin successfully"
exit
interact
    
por Su_scriptingbee 16.01.2017 / 14:38

1 resposta

2

Você pode corresponder a um "padrão" de tempo limite nas linhas expect . Por exemplo,

#!/usr/bin/expect -f
proc abort { } { send_user "Timeout!" ; exit 2 }
set timeout 1
set host_name [lindex $argv 0]
spawn ssh -q -o StrictHostKeyChecking=no "user1\@$host_name"
expect timeout abort "assword:"
send "abcd@123\r"
expect timeout abort "assword: " { send_user "bad password\n"; exit 3 } "$\r"
puts "user1 loggedin successfully"

Isso adiciona um procedimento de uma linha abort ao início e o padrão + sequência de ações timeout abort a cada expect . Isso chamará o procedimento se a expectativa expirar. O procedimento grava uma string para stdout e sai com o código de retorno 2 em vez do padrão 0. Você pode testar esse código de saída no seu script ksh se quiser.

Para detectar uma senha de login incorreta, você pode procurar um segundo prompt para a senha ao mesmo tempo em que procura o prompt "$" mostrando que você efetuou login ok.

    
por 16.01.2017 / 16:54

Tags