Jeffrey’s Blog

使用expect实现自动登录SSH服务器,并在远端执行命令

脚本内容如下:

#!/usr/bin/expect -f

if {$argc<2} {
puts stderr “Usage: $argv0 host user passwaord timeout”
exit 1
}
set HOST [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWD [lindex $argv 2]
set TIMEOUT [lindex $argv 3]

set timeout $TIMEOUT

spawn ssh -l $USER $HOST

# 判断是否是第一次登录
expect_before “no)?” {
send “yes\r” }
sleep 1

# 输入密码
expect “password:”
send “$PASSWD\r”
#如果想直接进入交互模式,可以直接用下面这句
#interact

#自动在远端服务器执行命令

#判断提示符
sleep 2
expect “*#”
send “mkdir /blog.zhangjianfeng.com/tmp/abcd -p\r”
send “ls -l\r”
expect “*#”
exit

## END ##

如果需要调用多台主机,可以写一个shell脚本来调用上面的脚本expect.sh
#cat callexpect.sh
#!/bin/bash
TIMEOUT=2
for i in `cat list`
do
HOST=${i%% *}
USER=`echo $i | awk -F [\ :] ‘{print $2}’`
PASS=${i##*:}
./expect.sh $HOST $USER $PASS $TIMEOUT
done
#list文件格式是 ip:user:passwd

注:也可以通过rsa的密钥直接登录远程SSH服务器,不过不太灵活。

# Last modified at: March 2nd, 2009 06:56pm
给本文打分: 1 Star2 Stars3 Stars4 Stars5 Stars (1 votes)
Loading ... Loading ...

转载本站文章请注明, 转载自:  Jeffrey’s Blog [http://blog.zhangjianfeng.com]
本文链接:  http://blog.zhangjianfeng.com/article/789
@ 阅读全文 | 2008/10/25 12:31pm | Category: 系统管理 | 1,239 views   Print This Post  
收藏到网摘: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

京ICP备06038449号