您的位置:首页 > 其它

用expect实现ssh自动登录对服务器进行批量管理

2010-08-10 12:01 681 查看
1.实现ssh自动登录完成任务的expect脚本

[root@localhost shell]# cat login.exp

#!/usr/bin/expect -f

set ipaddress [lindex $argv 0]

set passwd [lindex $argv 1]

set timeout 30

spawn ssh root@$ipaddress

expect {

"yes/no" { send "yes\r";exp_continue }

"password:" { send "$passwd\r" }

}

expect "]*"

send "mkdir -p /tmp/haha\r"

send "exit\r"

2.调用login.exp完成批量管理

#!/bin/bash

for i in `awk '{print $1}' passwd.txt`

do

j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`

expect /root/shell/login.exp $i $j

done

3.passwd.txt

192.168.0.2 password2

192.168.0.3 password3

另一自动登录的例子:
########### auto_login.sh #####################

1 #!/usr/local/bin/expect

2 set PASSWD [lindex $argv 1]

3 set IP [lindex $argv 0]

4 set CMD [lindex $argv 2]

5 spawn ssh $IP $CMD

6 expect "(yes/no)?" {

7 send "yes\r"

8 expect "password:"

9 send "$PASSWD\r"

10 } "password:" {send "$PASSWD\r"} "*host " {exit 1}

11 expect eof
第一行制定使用/usr/local/bin目录下的expect命令对后面的程序进行解释。

第二行,三行,四行,分别从命令行参数中获取要登录的主机IP地址,登陆密码,以及要执行的命令。

第五行,大概就是要触发这样一个事件,执行ssh $IP $CMD命令。

第6行道第11行就是expect的整个交互过程了。

如果读取到(yes/no)?提示符,就输入yes并回车,如果读取到password:提示输入密码的字符串,就输入用户登录密码(root用户)。

当然如果不是第一次登陆,以前已经登录过的话,当输入ssh $IP $CMD回车后,会直接提示输入密码也就是说会读到字符串”* password:”,这个时候会输入密码回车(send "$PASSWD\r").

另外,如果主机不可达的话,(yes/no)?和”password:”的可能都不会出现,系统会提示:

“No route to host”这个时候,我们退出程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: