Linux expect详解 2018-07-11 分类:Linux Shell / 系统运维 / 编程开发 阅读(6670) 评论(0) 随处可见的expect 第一次见expect这个命令还是我第一次参加全量上线的时候...,那是公司的一个牛人用Shell脚本写的一套自动部署、MD5 比对、发布的全量上线工具,没事的时候,看了下其中的几个脚本,好多的expect命令。...先抛出一个问题 现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?...interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化...":设置变量; spawn ssh $username@$host:spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect...获取上一命令执行后的返回信息,如果匹配成功 则执行后续操作 spawn 交互程序开始后面跟命令 set 定义变量 puts...expect执行结束 退出 interact 结束 2.实例 需求1描述:在没有ssh密钥认证时,scp远程复制到目标主机需要每次输入密码,这里使用expect免去手动输入密码的操作.../bin/sh expect /home/sendUtil.sh 参数1 参数2 参数3 参数4 远程复制scp脚本: #!.../usr/bin/expect spawn sftp -oPort=16022 sftp@192.168.12.32 expect "\*assword\*" send "Password\r" expect
expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!...expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下载:expect-5.43.0.tar和tcl8.4.11-src.tar 下载地址:https://pan.baidu.com...[root@xw4 tmp]# sh test.sh expect脚本的写法: [root@xw4 tmp]# cat test #!...方法: 利用expect编写sshkey.exp在远程主机上生成id_rsa,并重定向到本地.在利用noscp.exp.把文件复制到远程主机 为了节省自己的时间,可以写个expect自动化脚本,分享如下...: (1) 如上expect安装后的路径是: [root@xw4 ~]# which expect /usr/local/bin/expect (2) 做个expect执行文件的软件 [root@xw4
/usr/bin/expect而不是普通的bash脚本那样 spawn就是用来启动新的进程 expect “password” ,注意这个是expect脚本里面内部的命令,代表用来等待进程反馈,可以接受字符串和正则表达式...,这段的意思就是将spawn启动的进程的输出当作expect命令的输入,如果包含password脚本,就会向着标准输出 输出123456\r ,注意\r代表换行,跟我们输入完一个命令换行是一个道理。...这里我们的expect后面是带了大括号,跟上面的写在两行的效果一直。可以理解为另一种写法。...,如果匹配的不是,那么就要自己输入了,但是我们有可能在第一次有不同的提示,这个时候就需要使用多分支语法 expect 只要匹配到aaa 或者password其中的一种就会输出。...eof; " } for server in $SERVERS do sshcopyid $server done 以上就是本次介绍的expect命令在linux下实现批量ssh免密的全部过程
在Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。...linux-expect.jpg 什么是Expect命令? expect 是一个用于自动化交互式进程的工具。它的主要功能是根据程序的输出模式(patterns)发送输入,从而实现自动化交互。...自动化测试 在测试环境中,expect 可以用于自动化测试,模拟用户的输入和操作。这有助于确保程序在各种情况下的正确性。...错误处理 使用 expect_before 和 expect_after 处理在其他期望之前或之后出现的常见模式,提高脚本的健壮性。 以下是一个简单的expect脚本,用于自动化SSH登录 #!...expect "$ " send "ls\n" expect "$ " send "exit\n" 脚本执行过程如下 _20231202223700.jpg 总结 expect命令是Linux系统中一个非常实用的工具
在做日志分析工具时,发现在屏幕上拿到日志结果会有点慢,然后查了一下expect ssh timeout的设置,原来是这里有个默认时间的问题,所以整理一下: expect脚本我们都知道,首先spawn我们要执行的命令...,然后就给出一堆expect的屏幕输出,如果输出match了我们的expect的东西,我们就会send一个命令上去,模拟用户输入。...但是expect中等待命令的输出信息是有一个timeout的设定的,默认是10秒。这个特性是防止那些执行死机的命令的。...一旦到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行。或者我们在expect脚本中如果定义了timeout的响应代码的话,这些代码就会被执行。 ...解决这样的问题非常简单,最简单的办法就是在expect脚本的开头定义: set timeout -1 -- 没有timeout set timeout XX -- 设定具体的timeout时间(秒)
如果值非零或按下^C(或击中断点,或脚本中出现其他适当的调试器命令),调试器将在下一个 Tcl(Tool Command Language) 过程之前接管控制。...-b 默认情况下,命令文件被读入内存并完整地执行。有时需要一次读取一行。例如,stdin 是这样读取的。为了强制任意文件以这种方式处理,请使用 -b 选项。 -v 显示 expect 版本信息。...默认情况下,exp_continue 重置超时计时器,-continue_timer 标志防止定时器重启。...其中 <<-EOF 和 EOF 包围的内容块,被重定向到左侧命令 expect 的 stdin 中。...} "password" { send "root\n" } } expect eof ---- 参考文献 expect(1) - Linux manual page - man7.org
最近用到自动交互脚本进行数据库备份,以前虽然也有用来使用 ftp 远程获取文件,还来没有系统记录过,趁这次机会总结一下。...expect自动交互流程: spawn启动指定进程 expect获取指定关键字 send向指定程序发送指定字符 执行完成退出. 注意该脚本能够执行的前提是安装了 expect。...四个命令 Expect中最关键的四个命令是send,expect,spawn,interact。...,expect还是很强大的。...Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/about-linux-expect
在服务器开发中,有时候需要同步文件(scp),远程服务器(ssh)等等,难免要进行密码的检验,这就麻烦了,不过认识expect就有解决方案啦,那么我们来认识一下吧~~~ ---- ****expect简介...**** expect是Linux脚本编程工具语言,用来实现自动和交互式任务进行通信,从而不用手动处理。...---- ****与bash共用**** 从上面可以看出第一行已经指定了脚本的解析器,但是很多时候或场景我们只希望expect作为shell脚本的一个小小的调用部分,然而使可以的,这也是最常用的。...--------expect结束---------- ---- Linux运维基础且常用命令 Linux之crontab定时任务 Linux之sed文本处理命令 Linux之ps进程查看命令 Linux...之expect交互语言命令 Linux之tail命令 ----
/usr/bin/expect -f set password oracle #download spawn scp /home/oracle/p10404530_112030_Linux-x86...-64_1of7.zip oracle@192.168.188.167:/home/oracle/ set timeout 300 expect "oracle@192.168.188.167...send "$password\r" set timeout -1 ------->>>>>>注意此处的-1,-1表示永不超时,也就是:等 scp 命令正常执行完成之后,控制权会转移到下一行。...send "exit\r" expect eof [oracle@hosta ~]$ [oracle@hosta ~]$ ....:/home/oracle/ oracle@192.168.188.167's password: p10404530_112030_Linux-x86-64_1of7.zip 100%
expect expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。...但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。.../login.sh】配置别名alias,或移动到可执行目录中,即可实现【login】一键登录; expect是一个处理交互的指令,通过expect我们可以把交互过程写到Shell脚本里以实现一些自动化操作...~ expect有四个核心的指令: spawn:启动新进程,后跟新进程要执行的指令; expect:指定要监听的字符串,如果spawn进程返回了匹配的字符串(如标准输入的提示信息),则触发send; send...:发送指定的字符串到spawn进程,代替标准输入; interact:用户参与交互; 对于login.sh的执行过程为: 【spawn】启动一个新进程执行ssh登录指令,【expect】监听到标准输入的提示信息
/usr/bin/expect -f set ip [lindex $argv 0 ] set username [lindex $argv 1 ] set password [lindex...$argv 2 ] set superpassword [lindex $argv 3 ] set timeout 10 spawn telnet $ip expect...exp_continue } "*assword" { send "$password\r"; exp_continue } "*>" { send "enable\r" ; exp_continue } } expect...assword" { send "$superpassword\r"; exp_continue } "*#" { exp_send "wr \r";} } exp_send "quit\r" expect...以上这篇linux expect 自动登录交换机保存配置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考。
分发系统介绍 expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。...但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。.../usr/bin/expect set host "192.168.85.132" #要远程登录的机器IP set passwd "123456" #远程登录的机器密码 spawn ssh root@$...\r" expect "]*" send "echo 1212 > /tmp/12.txt\r" expect "]*" send "exit\r" expect “]*” 表示图中括号里的,表示当检测到这个符号时就执行我们要执行的命令...远程的机器执行命令后创建的文本和内容 ? expect脚本传递参数 传递参数 #!
/bin/bash /usr/bin/expect <<-EOF set timeout 10000 spawn scp xixicat@10.12.191.128:/home/xixicat/demofile.... expect -exact "xixicat@10.12.191.128's password:" send "demopwd\r" expect "100%" expect eof EOF echo..."finish" 如果没有设置timeout,或者timeout不够长,那么就不能保证spawn的效果,由于网络原因,有可能超时,先send密码了,之后才返回要expect密码。
Expect 恰恰填补了其中的一些裂痕,解决了在 Unix 环境中长期存在着的一些问题。 Expect 使用 Tcl 作为语言核心,不管程序是交互和还是非交互的,Expect 都能运用。...工具安装 源代码和下载地址都是由 Linux 软件基金会维护的(sourceforge) # 因为Expect需要Tcl编程语言的支持 $ sudo yum install -y gcc $ sudo...需要说明的是 interact 命令其实用的不多,一般情况下使用 spawn、send 和 expect 命令就可以很好的完成任务了。...但在一些特殊场合下,使用 interact 命令还是能够发挥很好作用的。interact 命令主要用于退出自动化进入人工交互。...欢迎投稿,投稿邮箱: editor@hi-linux.com。 ? ?
---set expect_out(0,end) 10 \set expect_out(0,string)... bbbcabkkkk /set expect_out(1,start) ...2 第一个括号的匹配项---set expect_out(1,end) 3 \set expect_out(1,...string) bb /set expect_out(2,start) ...10 第二个括号匹配项 ---set expect_out(2,end) 10 \set expect_out
ubuntu下利用expect实现screen多窗口开机运行 1. expect的安装与使用 1.1. expect的安装与使用 是什么 expect 是用来进行自动化控制和测试的工具。...主要是和交互式软件telnet ftp ssh 等进行自动化的交互。 如何安装 1.2....expect autoexpect expect expect_autoexpect expect_autopasswd expect_cryptdir expect_decryptdir expect_dislocate...安装screen apt-get install screen screen用法这里不做过多的介绍,请大家google搜索 3. 利用expect实现screen多窗口运行 3.1..../root/stop.sh #每天晚上23.30 Bash 3.4 开机运行 设置开机启用,仅限ubuntu18版本 #首先检查rc-local是不是启动了,如果启动最后完全还要restart,这里的坑
expect 是建立在 tcl 语言基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信。...tk expect expect 命令学习 expect 是基于 tcl 演变而来的,所以很多语法和 tcl 类似,基本的语法如下所示: # 首行加上 /usr/bin/expect # spawn...expect 实际的作用就是监听目标进程的输出(spawn),根据期望输出(expect),进行响应 (send)。...学习 expect 工具,实际上学习三个核心指令 spawn、expect、send的使用,这三个指令的具体语法理解见下文。...参考资料 expect自动交互详解 Ubuntu使用Spawn和expect实现ssh自动登陆 Linux中通过expect工具实现脚本的自动交互
Linux之expect工具是一个根据脚本与其他交互式程序进行交互。通过在脚本中设定期望值和响应值进行交互操作。主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。...以SSH KEY 生成以及发送到远程服务器为例简单介绍下expect工具 expect 启用选项: -c执行脚本前先执行的命令,可多次使用-ddebug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用.../-"从文件名为-的文件读取)。-i交互式输入命令,使用"exit"或"EOF"退出输入状态--标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!..., 如果匹配成功, 就执行send的指令交互;否则等待timeout秒后自动退出expect语句send如果匹配到expect接受到的信息,就将send中的指令交互传递,执行交互动作。...-y install expect 使用 以vagrant创建的虚拟机为例 分别向192.168.56.4、192.168.56.5、192.168.56.7 发送密钥 首先需要保证以下机器可以密码登陆
$1, 以及脚本中的其他变量等 使用expect 命令来解决自动交互问题是非常广泛的,expect有自己独特的语法,可以写expect脚本来解决复杂的交互问题;但是很多时候,我们会需要在shell中通过调用...expect脚本来解决交互问题;这时候就需要Here Documents 来帮忙; 在expect使用的时候,需要注意如下几点: expect ... send ......的语法结构使用的坑,对于下面的语法结构,有时候send命令并没有成功的执行,这是因为spawn产生的子进程而并不知道send已经结束 expect ... send ......更好的写法是: expect ... send ... expect ......也正是这个原因,所以expect一般在最后都会使用如下的结构: expect eof 看如下的例子: [root@localhost ~]# cat 1.sh #!
领取专属 10元无门槛券
手把手带您无忧上云