期待スクリプトを使用して ssh ログインを自動化する Bash スクリプトを作成しました。スクリプトは複数のサーバーに接続し、いくつかのコマンドを実行します。bash スクリプトは、ログイン資格情報を 1 回要求します。
最初のサーバーへのログインが失敗した場合にスクリプトが終了し、スクリプトが次のサーバーをチェックしてユーザー アカウントがロックされるのを回避する機能を組み込みたいと考えています。アカウントのロックアウトは、3 回連続してログインに失敗した場合に発生し、スクリプトが接続を試みるサーバーの数が 3 を超えています。
これは、expect スクリプトを呼び出す 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 コマンドの出力 ( ) を取得しようとしましたが、うまくいきませんでした。どんな提案でも大歓迎です。