注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

常在心

淡泊明志,人生自在

 
 
 

日志

 
 

expect 使用1--自动化登录  

2011-11-30 14:33:27|  分类: TCL语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#!/usr/bin/expect

# 设置超时时间为 60 秒
set timeout  60
# 设置要登录的主机 IP 地址
set host 192.168.0.4
# 设置以什么名字的用户登录
set name root
# 设置用户名的登录密码
set password 123456

#spawn 一个 ssh 登录进程
spawn  ssh $host -l $name
# 等待响应,第一次登录往往会提示是否永久保存 RSA 到本机的 know hosts 列表中;等到回答后,在提示输出密码;之后就直接提示输入密码
expect {
    "(yes/no)?" {
        send "yes\n"
        expect "assword:"
        send "$pasword\n"
    }
"assword:" {
        send "$password\n"
    }
}
expect "#"
# 下面测试是否登录到 $host
send "uname\n"
expect "Linux"
send_user  "Now you can do some operation on this terminal\n"
# 这里使用了 interact 命令,使执行完程序后,用户可以在 $host 终端进行交互操作。
Interact


脚本实现配置自动化登录

本节的脚本实现基于 SSH key 交换的安全认证方式,并利用 Expect 来实现自动化登录。本节所实现的脚本可以运行在以下的实验环境中:用户使用的 SSH 客户端机器:操作系统均为 RHELS5.3, IP 地址为 192.168.0.3, Expect 版本为 version 5.43.0;远程的 SSHD 服务器:操作系统均为 RHELS5.3,IP 地址为 192.168.0.4,用户名 / 密码为 root/123456。

Expect 脚本的内容如下:

清单7.基于 SSH key 交换的自动化登录脚本

 #!/usr/bin/expect      # 判断输入的参数是否为 3 个,如果不为 3 个,就打印错误信息,退出该程序。   if { $argc != 3 } {    puts stderr "Usage: test1 host-address username host-password\n"   exit 1    }      # 设置超时时间为 60 秒   set timeout  60    # 将命令行输入的第一个参数作为将要登录的 SSHD 服务器   set host [lindex $argv 0]    # 第二个参数是用户名,赋值给 name, 之后用 $name 格式来使用   set name [lindex $argv 1]    # 第三个参数是以 $name 登录 $host 的口令   set password [lindex $argv 2]      ##set timeout  60    ##set password "cluster"   ##set name “root”   ##set host "192.168.0.4"     #root 用户的 rsa key 放在 /root/.ssh 中,其他用户则放在 /home/$name/.ssh    if { $name == "root"} {       spawn scp /$name/.ssh/id_rsa.pub $name@$host:/tmp    } else {       spawn scp /home/$name/.ssh/id_rsa.pub $name@$host:/tmp    }    # 等待上个命令的响应   expect {       "(yes/no)?" {           send "yes\n"          expect "assword:"          send "$pasword\n"      }    "assword:" {           send "$password\n"      }         }    # 输入密码后,拷贝成功,出现 100% 字符串,作为预期响应   expect "100%"     # 调用 ssh 以 $name 用户名登录到 $host 上   spawn  ssh $host – l$name    # 期待提示出入密码的响应   expect "assword:"   # 接收密码   send "$password\n"   expect ":~#"   # 将刚刚拷贝的 rsa key 添加到用户的 home 目录下的 ./ssh/authorized_keys    if { $name == "root"} {       send "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys\n"   } else {       send "cat /tmp/id_rsa.pub >> /home/$name/.ssh/authorized_keys\n"   }    expect ":~#"   # 操作成功后,退回 SSH 客户端机器   send "exit\n"   expect "#"     # 下面将测试能否自动登录,不用输入密码   spawn  ssh $host – l$name    expect  {               "Welcome" {                   send_user "Auto login the server successfully!"              }               "assword:" {                   send_user "failed to login the server!"              }    }      send "ls\n"   expect ":~#"   # 退出 $host    send "exit\n"   # 程序结束   expect eof   
  评论这张
 
阅读(284)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017