用expect做自动应答脚本
Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。 Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。
需要安装expect、tcl包:
yum install expect tcl
示例脚本:
#!/usr/bin/expect、
set timeout
set username [lindex $argv ]
set password [lindex $argv ]
set host [lindex $argv ]
spawn ssh $username@$host
expect "assword:"
send "$password\r"
expect "#"
send "touch a.txt\r"
send "touch b.txt\r"
send "touch c.txt\r"
send "touch d.txt\r"
send "exit\r"
expect eof
exit
#interact
说明:
#!/usr/bin/expect
这一行告诉操作系统脚本里的代码用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。
set timeout 10
设置超时时间的,计时单位是:秒。timeout -1 为永不超时
set username [lindex $argv 0]
set password [lindex $argv 1]
set host [lindex $argv 2]
$argv 参数数组,expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
spawn ssh $username@$host
spawn是进入expect环境后才可以执行的expect内部命令。它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
expect "assword:"
这里的expect也是expect的一个内部命令, expect的shell命令和内部命令是一样的,但不是一个功能。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的10秒 .
send "$password\r"
这里就是执行的交互动作,与手工输入密码的动作等效。
注意: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。
expect "]#"
登录成功后匹配的bash提示符。
send "touch a.txt\r"
send "touch b.txt\r"
send "touch c.txt\r"
send "touch d.txt\r"
在远程主机登录成功后执行的命令。
send "exit\r"
退出登录的远程终端的shell。
expect eof
exit
结束expect的交互。
interact
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
执行脚本方法:
./auto_ssh.sh $user $password $ipaddr
$user :登录远程终端的用户名
$password:远程终端用户的密码
$ipaddr:远程主机的IP地址
执行脚本:
[root@host122 test]#./auto_ssh.sh root 192.168.68.239
spawn ssh root@192.168.68.239
root@192.168.68.239's password:
Last login: Thu Oct :: from 192.168.68.232
[root@host129 ~]# touch a.txt
[root@host129 ~]# touch b.txt
[root@host129 ~]# touch c.txt
[root@host129 ~]# touch d.txt
[root@host129 ~]# exit
logout
Connection to 192.168.68.239 closed.
验证:
[root@host129 ~]# ls -l
总用量
-rw-r--r-- root root 10月 : a.txt
-rw-r--r-- root root 10月 : b.txt
-rw-r--r-- root root 10月 : c.txt
-rw-r--r-- root root 10月 : d.txt
遇到下面的错误提示:
spawn: command not found
解决方法,给脚本加上执行权限,并且不要用sh auto_ssh.sh的方式执行:
Chmod +x auto_ssh.sh
./auto_ssh.sh
用expect做自动应答脚本的更多相关文章
- 用expect做自动运行脚本
下面的脚本演示了在Ubuntu上安装expect,写一个切换用户的expect脚本,并运行脚本看到效果的过程. root@guserver:~# apt-get install expect godu ...
- expect 实现自动交互脚本
1. 说明 在编写脚本时,可能会遇到需要在另一台主机上执行一个命令,或者在本机拷贝另一台主机内的一个文件.如果两台主机之间没有做互信,就会牵扯到用户输入密码的交互过程,这对编写自动脚本来说, 就行不通 ...
- shell脚本--expect自动应答
expect自动应答 TCL语言 需求1:远程登录到A主机,什么事情也不做 #! /usr/bin/env expect # 开启一个程序 spawn ssh root@192.144.213.11 ...
- expect自动应答
expect脚本 1. expect简介 expect是一个用来处理交互的命令.借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成. expect(自动应答) 基于TCL(Tool C ...
- linux自动交互工具expect,tcl安装和安装包,以及自动互信脚本
linux自动交互工具expect,tcl安装,以及自动互信脚本 工作中需要对几十台服务器做自动互信,无意中发现expect命令,研究一番. 在网上找了许多资料也没有安装成功,摸索着总算成功了.现分享 ...
- [转帖]自动交互式脚本--expect
自动交互式脚本--expect https://www.cnblogs.com/zhuiluoyu/p/4873869.html 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器 ...
- 做了一个简易的git 代码自动部署脚本
做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08) 阅读(200 ...
- 使用expect实现自动登录的脚本
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
随机推荐
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- init进程学习
linux的init进程 一个在线编辑markdown文档的编辑器,是内核启动的第一个进程,init进程有很多重要的任务,它的pit 为1,在linux shell中使用pstree命令可以看到它为其 ...
- java创建对象的四种方式
1.最常见的 new 一个 2使用反射机制创建对象,直接调用非构造函数 Class obj=Class.forName("A"); A a=obj.newInstance(); C ...
- hive 0.11的安装配置
一.上传hive 0.11解压后的文件到linux 1.用的版本是shark站点提供的,可能是针对shark修改了代码. 2.追加mysql.oracle两个jdbc驱动包到lib目录下. 二.配置相 ...
- 【转载】c++中的 extern "C"(讲的更好一些)
[说明]本文章转载自 东边日出西边雨 的文章http://songpengfei.iteye.com/blog/1100239 ------------------------------------ ...
- PC问题-使用BAT方法清理Delphi临时文件
@echo offdel /S *.~*del /S *.dcudel /S *.dskdel /S *.hppdel /S *.ddpdel /S *.mpsdel /S *.mptdel /S * ...
- Umbraco中的ModelBuilder
Umbraco中的ModelBuilder有以下几种形式 Pure Live models Dll models LiveDll models AppData models LiveAppData m ...
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...
- CentOS6.5安装MySQL及完全卸载
原文地址:http://www.cnblogs.com/zhongshengzhen/ 第1步.yum安装mysql [root@localhost ~]# yum -y install mysql- ...
- sql STUFF用法
sql STUFF用法 1.作用 删除指定长度的字符,并在指定的起点处插入另一组字符. 2.语法 STUFF ( character_expression , start , length ,char ...