/usr/bin/expect set host "192.168.6.77" set passwd "12341234" spawn ssh root@$host expect { "yes/no
crontab执行expect脚本 通过rsync的ssh差异备份方式同步本地目录到远端目录,expect代码如下,命令行手动执行即可 Expect代码 # cat expecttool #!.../usr/bin/expect -f set timeout 7200; spawn /usr/bin/rsync -avz -e "/usr/bin/ssh" /path/to/local.../dir/ remoteuser@remotehost:/path/to/remote/dir/ expect { "*yes/no*" { send "yes\r"; ... send "pasword\r"; } } interact 如果要放到crontab任务中,需要把interact替换为 expect
# 1. expect 自动化交互脚本 # 1.1. 介绍 expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。 # 1.2....eof Expect脚本必须以interact或expect eof 结束,执行自动化任务通常expect eof就够了 expect eof 是在等待结束标志。...由spawn启动的命令在结束时会产生一个eof标记,expect eof 即在等待这个标记 # 1.4. bash shell内加入expect脚本 使用<<-EOF ,引入expect脚本。 #!...expect "]#" { send "cd /\r" } # 结束 expect eof 3). 使用脚本 ..../test_expect.exp username ip password # 注意事项 脚本文件内容第一行必须加入#!/usr/bin/expect。 expect 脚本文件执行必须使用 .
expect脚本远程登录 yum install -y expect 自动远程登录 [root@aminglinux-02 sbin]# vim 1.expect #!.../usr/bin/expect set host "192.168.133.132" set passwd "123456" spawn ssh root@$host expect { "yes/...no" { send "yes\r"; exp_continue} // "password:" { send "$passwd\r" } } interact //脚本结束 在expect...-bash: ./1.expect: 权限不够 [root@aminglinux-02 sbin]# chmod a+x 1.expect 成功登录 [root@aminglinux-02 sbin]...# ./1.expect spawn ssh root@192.168.133.130 root@192.168.133.130's password: Last failed login: Wed Sep
由于 并没有默认安装,所以需要先安装: sudo apt install expect 另外因为 脚本有专用的解释器,所以在脚本的第一行不是: #!/bin/bash 而是: #!.../usr/bin/expect -f 如此一来,我们需要将用到交互式操作的命令均抽离出来分别写脚本,这样无疑会造成麻烦,如果交互式的命令很多时,会需要写很多脚本。...因此需要想办法将 脚本嵌入到 脚本中。 在执行 脚本时有三种方法,第一种: ./bash_script.bash 这要求脚本有可执行权限并且第一行是: #!.../bin/bash expect_tmp() { expect -c " set timeout 10 spawn cmd ......expect { "[Y/n]" { send "Y\n" } } interact " echo expect_tmp done!!!
expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 #!.../usr/bin/expect set passwd "123456" spawn rsync -av root@192.168.133.132:/tmp/12.txt /tmp/ expect { "...yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof expect eof :只有spawn执行的命令结果才会被...expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,eof和timeout。
expect脚本传递参数 传递参数 #!.../usr/bin/expect set user [lindex $argv 0] //第一个参数 set host [lindex $argv 1] //第二个参数 set passwd "123123a..." set cm [lindex $argv 2] //第三参数 spawn ssh $user@$host expect { "yes/no" { send "yes\r"} "password:..." { send "$passwd\r" } } expect "]*" send "$cm\r" expect "]*" send "exit\r" ./3.expect [第一个参数] [第二个参数...所以脚本最后的exit 就没有办法执行,只能手动终止
最近用到自动交互脚本进行数据库备份,以前虽然也有用来使用 ftp 远程获取文件,还来没有系统记录过,趁这次机会总结一下。...expect自动交互流程: spawn启动指定进程 expect获取指定关键字 send向指定程序发送指定字符 执行完成退出. 注意该脚本能够执行的前提是安装了 expect。...在expect中多次匹配就需要用到 send_user 用来打印输出 相当于shell中的echo exit 退出expect脚本 eof...expect执行结束 退出 set 定义变量 puts 输出变量 set timeout 设置超时时间 使用示例 下面以我最近使用的脚本来一行行进行分析..."${user}@${ip}'s password:" # 发送内容pass,类似于我们使用时输入密码,将该步骤交给脚本完成 send "${pass}\r" # 执行完成后自动退出 expect eof
expect 是建立在 tcl 语言基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信。...# send 和 send_user:send 会将 expect 脚本中需要的信息发送给 spawn 启动的那个进程,而 send_user 只是回显用户发出的信息,类似于 shell 中的 echo...expect 实例 自动拷贝 scp scp 远程复制文件(夹)涉及到很多交互式命令,我们不得不人工响应,expect 的出现解决了这个问题,实例脚本如下。...} "password" { send "$password\n" } } expect eof EOF } sshdzd 脚本运行成功输出如下: start ssh waibao server...参考资料 expect自动交互详解 Ubuntu使用Spawn和expect实现ssh自动登陆 Linux中通过expect工具实现脚本的自动交互
所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。 expect脚本远程登录 yum install -y expect 自动远程登录 #!...expect脚本远程执行命令 自动远程登录后,执行命令并退出 #!.../usr/bin/expect set user "root" set passwd "123456" spawn ssh $user@192.168.133.132 expect { "yes/no...\r" expect "]*" send "echo 1212 > /tmp/12.txt\r" expect "]*" send "exit\r" expect “]*” 表示图中括号里的,表示当检测到这个符号时就执行我们要执行的命令...expect脚本传递参数 传递参数 #!
/usr/bin/expect set full_name [lrange $argv 0 0] set domain_name [lrange $argv 1 1] set Organization_name...3] spawn openssl req -new -newkey rsa:2048 -nodes -keyout $Generic_name.key -out $Generic_name.csr expect..."]:" send "cn\r" expect "]:" send "$full_name\r" expect "]:" send "$full_name\r" expect "]:" send "$...Organization_name\r" expect "]:" send "ops\r" expect "]:" send "$domain_name\r" expect "]:" send "\r"...expect "]:" send "\r" expect "]:" send "\r" expect eof
expect介绍 expect是一个自动交互功能的工具,可以满足代替我们实际工作中需要从终端手动输入某些内容来使得程序或命令继续运行的目的。...如安装软件是时的一些提示,ssh远程主机执行命令时需要多次输入密码的情况 expect主要命令 spawn 启动新进程,用于执行shell命令 send 发送字符串给expect控制的进程 set...永远等待 set timeout 10 设置超时时间 10秒 interact 将脚本的控制权交给用户,用户继续使用shell执行命令 $argv expect 脚本可以接受从bash传递过来的参数...安装expect yum install expect 免密码通过SSH登录服务器 [root@linux /]# vim ssh.exp #!.../usr/bin/expect set ip "172.16.0.8" set user "root" set pwd "123456" spawn ssh $user@$ip expect { "
expect脚本远程执行命令 动远程登录后,执行命令并退出 #!.../usr/bin/expect set user "root" set passwd "123123a" spawn ssh $user@192.168.133.130 expect { "yes/no...\r" expect "]*" send "echo 1212 > /tmp/12.txt\r" expect "]*" send "exit\r" expect "]" : “” 通配]右边所有字符..., send 执行命令 A 机器执行脚本 [root@aminglinux-02 sbin]# ./2.expect -bash: ./2.expect: 权限不够 [root@aminglinux...192.168.133.131 [root@aminglinux-01 ~]# touch /tmp/12.txt [root@aminglinux-01 ~]# echo 1212 > /tmp/12.txt B机器查看脚本运行的命令是否成功
文件expect_ssh_scp.sh #!.../usr/bin/expect #表示使用expect...语句 "(yes/no)" {send "yes\r";exp_continue} "*assword:" {send "password\r"} } expect 100% expect...如果超时限制对下面所有的expect语句都有效,比如下面的scp远程复制命令,如果数据没传输完,程序就超时了,那怎么解决呢? 那样的话expect 100%这句代码又有什么作用??...我看到一种解释是:代码刚开始设定了timeout的时间为10秒,如果在执行scp任务时遇到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止。这样理解对吗?
expect expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。...所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。...大多数工作都要在虚拟机上完成,为此每天要执行很多次【ssh xxx@xxxxxx】指令登录虚拟机;有很多方式解决这个问题,如使用xshell、secureCRT等工具记录常用的连接,我就写了一个简单的脚本实现一键登录...~ login.sh脚本内容如下: #!.../login.sh】配置别名alias,或移动到可执行目录中,即可实现【login】一键登录; expect是一个处理交互的指令,通过expect我们可以把交互过程写到Shell脚本里以实现一些自动化操作
1.在使用之前,先安装epel源,yum install expect -y 2.写分发脚本,后缀为exp #!.../usr/bin/expect set host_ip [lindex $argv 0] spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $host_ip expect...;return} } expect eof exit -onexit { send_user "Job has finished!"...} 注:set的作用是设置变量,spawn设置执行命令时,可以引用变量;变量的第一个参数为0 3.执行以下命令开始分发 for ip in `cat /root/ip.txt`;do expect /root
expect脚本指定host和要同步的文件 set timeout 定义超时时间(单位为 秒) -1 为永远不超时 指定host和要同步的文件 #!.../usr/bin/expect set passwd "123123a" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync...-av $file root@$host:$file expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect
免交互:自动化处理的前提条件 一、Expect概述 Expect是建立在tc|基础.上的一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shelI脚本中不可交互的问题。...为了模拟这种输入,可以使用Expect脚本 Expect安装 挂载光盘 制作本地YUM源 执行安装命令 yum -y install expect 二、基本命令 1、格式 set...expect eof $argv参数数组 Expect脚本可以接受从bash传递的参数,可以使用 [lindex argv n] 获得,n从0开始,分别表示第一个1,第二个2,第三个3……参数 argvn...没有空格则表示脚本名称 ; argv n有空格则代表下标 Expect脚本必须以interact或expect eof 结束,执行自动化任务通常expect eof就够了 expect eof 是在等待结束标志...由spawn启动的命令在结束时会产生一个eof标记,expect eof 即在等待这个标记 三、Expect语法 send命令不具备回车换行功能,一般要加 \r 或 \n 单一分支语法 expect
最近通过exploring expect书籍,简单学了下expect脚本语言,这个脚本语言是tcl语言的扩展,用来解决一些工具无法自动交互的问题,如ssh登录时,无法在命令就指定密码等。...下面是利用expect来实现管理多台服务器的简单例子: #!.../usr/bin/expect #purpose:auto run command on multiple servers #how to: mms #write by zhumaohai...192.168.0.100 192.168.0.101 192.168.0.102,定义了用户user1的密码为passwd1,用户user2的密码为passwd2,假如脚本文件名为ms,用法为: ..../ms user1 date 2、在使用脚本时,请确认系统已经安装有expect命令,centos使用yum install expect安装,ubuntu使用apt-get install expect
expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!...[root@xw4 tmp]# sh test.sh expect脚本的写法: [root@xw4 tmp]# cat test #!...方法: 利用expect编写sshkey.exp在远程主机上生成id_rsa,并重定向到本地.在利用noscp.exp.把文件复制到远程主机 为了节省自己的时间,可以写个expect自动化脚本,分享如下...~]# ln -s /usr/local/bin/expect /usr/bin/expect [root@xw4 ~]# ll /usr/bin/expect (3) 编写expect脚本: ---...跳转脚本 localhost:huan kevin$ cat jump #!
领取专属 10元无门槛券
手把手带您无忧上云