- 论坛徽章:
- 0
|
- #!/usr/bin/expect
- # 导入 Expect 类库
- set hostname [lindex $argv 0]
- # 设置操作的远程主机,$argv 类似 Shell 函数中的接收参数 [lindex $argv 0]
- # 则表示第一个接收参数 , 例如 expectExample.sh host1
- set username [lindex $argv 1]
- # 同上,第二个接收参数为登陆用户名
- set passwd [lindex $argv 2]
- # 同上,第三个接收参数为登陆用户密码
- set timeout 60
- # 设置等待超时为 60 秒
- spawn ssh $username@$hostname
- # 使用 spawn 命令来激活 ssh 程序,模拟终端的输出将能够被 Expect 所读取,模拟终端也能从 send 输入到远程主机
- expect {
- "yes/no" {send "yes ";exp_continue}
- "Password:" {send "$passwd ";}
- }
- #Expect 语句等待远程主机的字符串匹配,当匹配到了“yes/no”
- #则执行后面的操作 .expect 搜索模式"*password:",其中 * 允许匹配
- # 任意输入,所以对于避免指定所有细节而言是非常有效的。如果远程主机没有 action,
- #所以 Expect 检测到该模式后就继续运行。 一旦接收到提示后,下一行就就把密码送给当前进程。
- send "sudo -s\r"
- expect "Password:" {send "$newpasswd\r"}
- # 执行 sudo 用户角色转换操作
- send "copy /etc/sudoers /usr/local/etcsudoers\r"
- # 执行实际运维操作
- send "exit\r "
- send "exit\r "
- expect eof {exit 1}
复制代码 spawn 激活一个 Unix 程序来进行交互式的运行 .
spawn ssh 192.168.1.2
send 向进程发送字符串 send "sudo -s\r"
set 给 Expect 脚本中的变量赋值 set username “joe”
expect 等待进程收到的远程主机的输出,并匹配对应的字符串 , 一旦匹配,执行后续的操作 expect { "yes/no" send "yes" ;}
|
|