lichengcom2009 发表于 2015-5-27 01:26:57

Expect实现Unix/Linux密码相关命令(telnet ftp passwd ssh)的自动交互管理

  引用一段维基百科关于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
51 set name
52 set password
53
54 do_ssh_login $hostname $name $password
页: [1]
查看完整版本: Expect实现Unix/Linux密码相关命令(telnet ftp passwd ssh)的自动交互管理