我做了一個Bash腳本,它使用期望腳本來自動執行ssh登錄。該腳本連接到多個服務器並運行一些命令。 bash腳本提示輸入一次登錄憑證。從Bash調用的Expect腳本的退出狀態代碼
我想加入一個功能,其中腳本在第一臺服務器登錄失敗時終止,以避免腳本檢查下一臺服務器導致用戶帳戶被鎖定。帳戶鎖定發生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 [email protected]$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命令將返回一個非零值期望腳本中的密碼,但沒有解決。 任何建議將不勝感激。
老實說,我會猶豫移動到任何超過預期。多年來,Expect一直是實現自動化系統任務自動化的重要工具之一。它做了很多其他這樣的工具無法比擬的東西(例如它幾乎完美地模擬tty /用戶的能力)。這並不是說布料不是很好,因爲我對它一無所知......只是這個Expect有一些很大的鞋子可以填充。 – RHSeeger 2009-08-20 20:13:13
我只是建議這是因爲Fabric只是爲了這樣的任務而製作的。無害! – iElectric 2009-08-25 10:44:45
面料看起來很酷,感謝分享。 – 2010-08-23 22:35:15