|
引用一段维基百科关于Expect语言的介绍:
Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。
Expect的一大用处就是自动地处理 需要与用户交互的passwd ssh telnet等命令, 将这样的处理完全自动化。使用shell编程通常无法实现passwd的完全后台自动运行,一般需要用户交互地输入用户名 密码。
Expect语言的介绍与入门资料,请查阅《Exploring Expect》 附在线阅读网址: http://www.doc88.com/p-640599074164.html
下面贴一段使用ssh登录其他服务器并执行操作的脚本
1 #!/usr/bin/expect -f
2
3
4 # use ssh to login
5 proc do_ssh_login {hostname name password } {
6 spawn ssh $hostname -l $name
7 set ssh_spawn_id $spawn_id
8 # 1st time use ssh to one server with ssh, it will ask to save RSA
9 set is_send_password 0
10 expect {
11 "(yes/no)" {
12 send "yes\n"
13 }
14 "password:" {
15 set is_send_password 1
16 send "$name1_password\n"
17 }
18 }
19 if { $is_send_password == 0 } {
20 expect {
21 "password:" {
22 send "$name1_password\n"
23 set is_send_password 1
24 }
25 }
26 }
27 expect {
28 "$name1\@$hostname" {
29 puts "Login to $hostname correct"
30 # do your operation
31 do_operation $ssh_spawn_id
32 }
33 "*please try again*" {
34 puts "The password is incorrect please check"
35 exit 1
36 }
37 }
38 send "exit\n"
39 }
40
41 proc do_operation {ssh_spawn_id} {
42 # define the spawn_id, otherwise "send" command can't send the command to the spawn process which is created in proc do_ssh_login
43 set spawn_id $ssh_spawn_id
44 # add your command below
45 }
46
47 # set expect time out as 3 seconds
48 set timeout 3
49
50 set hostname [lindex $argv 0]
51 set name [lindex $argv 1]
52 set password [lindex $argv 2]
53
54 do_ssh_login $hostname $name $password |
|
|
|
|
|
|