我做了一个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