Centos expect spawn、linux expect 用法
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:
##############################################
#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispass\r"
interact
##############################################
1. [#!/usr/bin/expect]
这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和Linux下的bash、windows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
4. [expect "password:"]
这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒
5. [send "ispass\r"]
这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
#!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下
# Change a login shell to bash
set user [lindex $argv 0]
spawn bash $user
expect "]:"
send "/bin/bash "
expect eof
exit
使用expect自动登录
一,什么是expect?
在做系统管理时,我们很多时候需要输入密码,例如:连接 ssh,连接ftp,
那么如何能做到不输入密码吗?
我们需要有一个工具,能代替我们实现与终端的交互,
那么,就是它:expect,管理员的最好的朋友之一
它能够代替我们实现与终端的交互,我们不必再守候在电脑旁边输入密码,
或是根据系统的输出再运行相应的命令,
这些都可以由expect代替我们来完成
说明:expect到底是什么?
expect是一种脚本语言,使用起来非常简单,我们看后面的例子即可以了解到了
三,安装expect
备注:因为expect是基于tcl的,所以需要你的系统中安装有tcl
如何检查?
[root@dev ~]# whereis tcl
tcl: /usr/lib/tcl8.4 /usr/share/tcl8.4
如果看不到结果,请先安装tcl
安装,
[root@dev ~]# yum install expect
也可以从http://rpm.pbone.NET下载for相应发行版的rpm包
四,使用expect自动登录的例子
1,程序例子的内容 :
先做功能 上的说明
此程序ssh登录到作为参数传递过来的ip地址上
然后执行: df -h
free -m
uptime
来检查系统的情况
[root@dev ~]# cat monitor_auto
#!/usr/bin/expect -f
#-------------------------------------------------- about us
# product: monitorone
# Author: liuhongdi <hongdi.liu@chinafotopress.com>
# Last Modified: 2008-05-13
# version: 0.3.2
# user:this script will help you to monitor many linux(unix) machine
# license: this script is based GPL
#-------------------------------------------------- set the variable,you can modify the value
set loginuser "root"
set loginpass {passwordonthishost}
set ipaddr [lrange $argv 0 0]
set timeout 300
set cmd_prompt "]#|~]?"
#-------------------------------------------------- login by ssh
spawn ssh $loginuser@$ipaddr
set timeout 300
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
} -re "assword:" {
send "$loginpass\r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} timeout {
exit
} eof {
exit
}
}
expect {
-re "assword:" {
send "$loginpass\r"
}
-re $cmd_prompt {
send "\r"
}
}
#---------------------------------------------------- now,we do some commands
exec sleep 1
expect {
-re $cmd_prompt {
send "df -h\r"
}
}
exec sleep 1
expect {
-re $cmd_prompt {
send "free -m\r"
}
}
exec sleep 1
expect {
-re $cmd_prompt {
send "uptime\r"
}
}
exec sleep 1
#--------------------------------------------------
expect {
-re $cmd_prompt {
send "exit\r"
}
}
exit
#interact
2,程序 运行的显示结果
[root@dev ~]# ./monitor_auto 209.209.94.107
spawn ssh root@209.209.94.107
root@209.209.94.107's password:
Last login: Sun Feb 15 01:42:39 2009 from 201.103.105.49
[root@ws ~]#
[root@ws ~]# df -h
Filesystem ÈÝ ÒÑÓÃ ¿ÉÓÃ ÒÑÓÃ% ¹ÒÔصã
/dev/mapper/VolGroup00-LogVol00
133G 72G 55G 57% /
/dev/sda1 99M 13M 82M 14% /boot
none 1014M 0 1014M 0% /dev/shm
209.209.94.109:/www/pics
5.9T 5.6T 138G 98% /bank/bank1
[root@ws ~]# free -m
total used free shared buffers cached
Mem: 2026 1955 71 0 72 1621
-/+ buffers/cache: 261 1764
Swap: 1983 68 1915
[root@ws ~]# uptime
01:48:00 up 561 days, 8:53, 2 users, load average: 0.13, 0.09, 0.07
[root@ws ~]# [root@dev ~]#
四,对此程序的详细说明:
1,set loginuser "root"
set用来定义变量,定义之后的代码中可以使用所定义的变量
使用时注意需添加$符号
使用时的例子: spawn ssh $loginuser@$ipaddr
Centos expect spawn、linux expect 用法的更多相关文章
- linux expect, spawn用法小记
linux expect, spawn用法小记_IT民工_百度空间 linux expect, spawn用法小记 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://sys ...
- [转载]expect spawn、linux expect 用法小记
原文地址:expect spawn.linux expect 用法小记作者:悟世 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写 ...
- expect spawn、linux expect 用法小记
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- 【转】shell expect spawn、linux expect 用法小记 看着舒服点
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课
centos shell编程4[分发系统] 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要 ...
- Linux expect用法介绍
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...
- Linux expect 用法
expect是建立在tcl基础上的一个工具,它用来让一些需要交互的任务自动化地完成. 因为expect是基于tcl的,所以需要你的系统中安装有tcl 检查是否安装tcl,expect [root@ma ...
- Linux expect 介绍和用法
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. expect自动交互流程: spawn启动指定进程---expect获取指定关键字--- ...
- expect工具的简单用法
原创文档,转载请注明作者与本文URL. linux中的expect工具很不错,能够自动实现交互,也即是说自己自动进行ssh登录等动作.这是我写的一个简单的用法,稍作修改就可以变成很实用都脚本.有人介绍 ...
随机推荐
- Android设计和开发系列第一篇:Notifications通知(Design)
Design篇 Notifications The notification system allows users to keep informed about relevant and timel ...
- 【Linux】python 2.x 升级 python3.x 之后 yum命令出现except OSError, e: ^ SyntaxError: invalid syntax
python2.7升级到python3.6.4 文章链接 : https://zhuanlan.zhihu.com/p/33660059 我在服务器上.把linux默认安装的python2.7 升级 ...
- ( ( (int(*)(uint, ushort, uint *, uint, int)) (*((uint *)(TCM_BASE + 0x8))) ) (a,b,c,d,e) )
( ( (int(*)(uint, ushort, uint *, uint, int)) (*((uint *)(TCM_BASE + 0x8))) ) (a,b,c,d,e) ) 首先红 ...
- Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法
默认Attach to选择了Automatically determine the type of code to debug,显示Native Code.但附加进程到iexplore.exe断点无法 ...
- shell脚本技巧记录
2014/4/9 shell脚本变量处理: ${varible##*string} //从左向右截取最后一个string后的字符串 ${varible#*string} //从左向右截取第一个stri ...
- 【CF914G】Sum the Fibonacci 快速??变换模板
[CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a ...
- Java虚拟机六 堆溢出的处理
在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM. Exception in thread "main" java.lang.Out ...
- thinkphp开启事物的简单方法
使用thinkphp开启事务,ThinkPHP 3.2.2实现事务操作的方法: 开启事务: $User->startTrans() 提交事务: $User->commit() 事务回滚: ...
- easyui_2----messager
<script> $.messager.alert("这是头","这是内容"); </script> 必须放在 $(function() ...
- Java实现验证码的产生和验证
大家都知道为了防止我们的网站被有些人和黑客恶意攻击,比如我们网站的注册页面,如果我们在用户注册的时候不加上一个验证码框的话,别人就可以写一个脚本对你的网站进行恶意的注册,比如每分钟对你的网站进行n次的 ...