Я сделал сценарий 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 вернет ненулевое значение, если вход в систему будет неудачным из-за неправильного пароля в сценарии ожидания, но это не сработало. Любые предложения будут высоко ценится.