Я создал Bash-скрипт, который использует ожидаемый скрипт для автоматизации входа в ssh. Скрипт подключается к нескольким серверам и запускает некоторые команды.
Сценарий bash запрашивает учетные данные для входа один раз.
Я хочу включить функцию, в которой сценарий завершается, если не удается войти в систему для первого сервера, чтобы избежать проверки сценария для следующих серверов, что приводит к блокировке учетной записи пользователя. Блокировка учетной записи происходит в течение 3 последовательных сбоев входа в систему, и число серверов, к которым пытается подключиться скрипт, превышает 3.
Это фрагмент скрипта bash, который вызывает ожидаемый скрипт.
countu=0
for servername in $(cat $linux_host_list)
do
./script.expect $LUSERNAME $LPASS $servername Linux >> linux_log_file.txt & < /dev/null
let countl=countl+1
done
и вот фрагмент ожидаемого сценария (script.expect
)
#!/usr/bin/expect -f
set timeout 30
set username [lindex $argv 0]
set SPASS [lindex $argv 1]
set servername [lindex $argv 2]
set case [lindex $argv 3]
set prompt "(%|#|\\$|%\]) $"
switch $case {
Linux {
log_user 0
spawn ssh -o StrictHostKeyChecking=no $username@$servername
expect {
"assword:" {
send "$SPASS\r"
expect -re "$prompt"
}
expect -re "$prompt"
}
send "sudo su -\r"
expect {
"assword:" { send "$SPASS\r" }
}
expect -re "$prompt"
log_user 1
send "opcagt -status ; opctemplate -l ; cat watch.cf 2> /dev/null\r"
expect -re "$prompt"
log_user 0
send "exit\r"
expect -re "$prompt"
log_user 1
}
Я попытался получить выходные данные команды bash ($?
), предполагая, что команда bash вернет ненулевое значение, если произойдет сбой входа в систему из-за неверного пароля в ожидаемом сценарии, но это не сработало.
Любые предложения будут высоко оценены.