文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用expect命令实现Shell自动化交互

2023-06-09 14:39

关注

这篇文章将为大家详细讲解有关怎么使用expect命令实现Shell自动化交互,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

背景

linux脚本中有很多场景是进行远程操作的,例如远程登录ssh、远程复制scp、文件传输sftp等。这些命令中都会涉及到安全密码的输入,正常使用命令时是需要人工手动输入密码并接受安全验证的。为了实现自动化远程操作,我们可以借用expect的功能。

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。

expect的安装

expect是在Tcl基础上创建起来的,所以在安装expect前我们应该先安装Tcl。

(一)Tcl 安装

主页: http://www.tcl.tk

下载地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml

下载源码包

wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz

解压缩源码包

tar xfvz tcl8.4.11-src.tar.gz

安装配置

cd tcl8.4.11/unix ./configure --prefix=/usr/tcl --enable-shared make make install

注意:

安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。

暂时不要删除tcl源代码,因为expect的安装过程还需要用。

(二)expect 安装 (需Tcl的库)

主页: http://expect.nist.gov/

下载源码包

wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download

解压缩源码包

tar xzvf expect5.45.tar.gz

安装配置

cd expect5.45 ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic make make install ln -s /usr/tcl/bin/expect /usr/expect/bin/expect

expect

expect的核心是spawn、expect、send、set。

spawn 调用要执行的命令

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

其他设置

expect编写语法

expect使用的是tcl语法

示例

login.exp专用于远程登录,快捷使用方式: login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"

#!/usr/bin/expect -f########################################################### 通过SSH登陆和执行命令#参数:1.Use_Type [check/execute]#  2.SSHServerIp#  3.SSHUser#  4.SSHPassword#  5.CommandList [多个命令间以;间隔]#返回值:#  0 成功#  1 参数个数不正确#  2 SSH 服务器服务没有打开#  3 SSH 用户密码不正确#  4 连接SSH服务器超时##########################################################proc usage {} { regsub ".*/" $::argv0 "" name send_user "Usage:\n" send_user " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList\n" exit 1} ## 判断参数个数if {[llength $argv] != 5} { usage}#设置变量值set Use_Type [lindex $argv 0]set SSHServerIp [lindex $argv 1]set SSHUser [lindex $argv 2]set SSHPassword [lindex $argv 3]set CommandList [lindex $argv 4]#spawn ping ${SSHServerIp} -w 5#expect {# -nocase -re "100% packet loss" {#  send_error "Ping ${SSHServerIp} is unreachable, Please check the IP address.\n"#  exit 1# }#}set timeout 360set resssh 0#定义变量标记ssh连接时是否输入yes确认set inputYes 0set ok_string LOGIN_SUCCESSif {$Use_Type=="check"} { #激活ssh连接,如果要需要输入yes确认,输入yes,设置inputYes为1,否则输入ssh密码 spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string"} else {    spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList"}expect { -nocase -re "yes/no" {  send -- "yes\n"  set inputYes 1 } -nocase -re "assword: " {  send -- "${SSHPassword}\n"  set resssh 1 } #-nocase -re "Last login: " {  #  send -- "${CommandList}\n" #} $ok_string {} -nocase -re "Connection refused" {  send_error "SSH services at ${SSHServerIp} is not active.\n"  exit 2 } timeout {  send_error "Connect to SSH server ${SSHUser}@${SSHServerIp} timeout(10s).\n"  exit 4 }}#如果输入了yes确认,输入ssh密码if {$inputYes==1} { expect {  -nocase -re "assword: " {   send -- "${SSHPassword}\n"   set resssh 1  } }}#如果出现try again或者password:提示,说明输入的用户密码错误,直接退出。if {$resssh==1} { expect {  -nocase -re "try again" {   send_error "SSH user:${SSHUser} passwd error.\n"   exit 3  }  -nocase -re "assword:" {   send_error "SSH user:${SSHUser} passwd error.\n"   exit 3  }  eof {} }}send_error -- "$expect_out(buffer)"#-nocase -re "No such user" {#  send_error "No such user.\n"#  exit 5# }#exit

关于“怎么使用expect命令实现Shell自动化交互”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯