美文网首页
expect实现命令行简单交互

expect实现命令行简单交互

作者: lxfeng | 来源:发表于2016-06-18 22:01 被阅读0次

在服务器开发中,有时候需要自动同步另一个服务器的一个文件,这时候就需要通过scp来把文件复制到当前服务器目录下,如:

scp -r -P 2214:lex@192.168.120.204:/data/user/user.profile  ./

scp需要认证用户名和密码,可以通过在对方服务器通过密钥对来验证不需要输入密码验证,但除了这个还有其他方法,能够实现在执行scp命令时,要求输入密码时能够自动输入密码吗?

linux提供了一个Expect的工具,Expect是Unix系统中用来进行自动化控制和测试的软件工具,由DonLibes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。

简单地说,expect是一个工具,可以根据用户设定的规则和系统进程进行自动化交互,例如远程登陆的密码输入、自动化的执行远程命令。
expect的安装很简单,几个命令就搞定,具体谷歌(不是百度,程序员不要用百度)。
这是一个ssh自动登录的脚本:

#!/usr/bin/expect
spawn ssh root@192.168.22.194
expect "*password:"
send "123\r"
expect "*#"
interact

以上代码有几个关键字,

  • send:用于向进程发送字符串
  • expect: 期望从进程接收到的字符串,后面也可以跟正则表达式
  • spawn:启动进程
    第一行指定了该脚本的解释器,代码保存为ssh.exp 需要运行时输入./ssh.exp 即可。
    很多时候,我们使用expect的场景都是结合bash在使用,expect只是作为bash脚本的部分调用,因为bash里我们还需要执行其他复杂的功能:
#!/usr/bin/bash
 ...
expect<<- END 
scp -r -P 2214:lex@192.168.120.204:/data/user/user.profile  ./ 
expect "*password"
send "password"
expect eof 
END 

将expect脚本嵌入expect<<- END 和END之间即可,expect eof是指等待脚本执行结束,这里如果scp,要传输的文件略大,会断掉,因为expect有个默认的超时时间,时间到了脚本会中断,可以通过:

set timeout -1 -- 没有timeout 
set timeout XX -- 设定具体的timeout时间(秒) 

以上就是关于expect的简单使用,至于更高级的用法,需要的时候去搜索搜索就行了,都不难。

相关文章

  • shell_expect实现自动交互免密登录操作

    expect实现自动交互免密登录操作 expect 内部命令 在命令行直接输入expect可以进入expect程序...

  • expect实现命令行简单交互

    在服务器开发中,有时候需要自动同步另一个服务器的一个文件,这时候就需要通过scp来把文件复制到当前服务器目录下,如...

  • expect命令

    1.什么是expect expect是基于TCL的相对简单的一个免费的脚本编程工具语言,用来实现自动和交互式任务程...

  • Command 脚本自动交互

    自动交互场景 ssh 以 密码 形式登陆远程主机时实现密码自动输入 解决方案 使用expect命令 expect ...

  • expect - 自动交互脚本

    expect - 自动交互脚本 目录 expect参数 expect教程中文版 expect中文手册 expect...

  • 跳板机自动登录-MySQL client

    详情:shell & expect 实现 MySQL 命令行自动登录[https://hisen.me/20220...

  • shell 常用命令

    shell 常用命令 expect expect 命令是用来实现自动化交互通信的,比如当你在脚本中通过某些命令登录...

  • shell-expect

    expect 用来实现自动和交互式任务进行通信,而无需人的干预依赖tcl,离线安装expect前需要提前安装tcl...

  • shell编程之Expect

    2021-01-13expect的安装 expect应答函数的语法是一个免费的编程工具, 用来实现自动的交互式任务...

  • expect基础与用法

    Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don ...

网友评论

      本文标题:expect实现命令行简单交互

      本文链接:https://www.haomeiwen.com/subject/tkkbdttx.html