linux利器expect的使用

1、什么是expect
在做系统管理时,我们很多时候需要输入密码,例如:连接 ssh,连接ftp,那么如何能做到不输入密码,我们需要有一个工具,能代替我们实现与终端的交互,它能够代替我们实现与终端的交互,我们不必再守候在电脑旁边输入密码,或是根据系统的输出再运行相应的命令,这些都可以由expect代替我们来完成

expect到底是什么?
expect是一种脚本语言,使用起来非常简单

2、安装expect

yum -y install expect

3、示例

#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispassr"
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 "ispassr"]
这里就是执行交互动作,与手工输入密码的动作等效
温馨提示: 命令字符串结尾别忘记加上“r”,如果出现异常等待的状态可以核查一下
6.[interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

svn更新

#!/usr/bin/expect -f  

set USER admin
set PASS 123456

# the working copy we‘re going to update

set WC  /data/www/www.data.com
set LOG /var/log/svn.log  

set SVNBIN /usr/bin/svn  

set timeout 30  

spawn $SVNBIN update -r HEAD --force $WC  

expect {
    "Password for ‘root‘: " { send "\r"; exp_continue; }
    "*Username:*" { send "$USER\r";exp_continue; }
    "*Password for ‘*‘:*" { send "$PASS\r";exp_continue; }
    "*Store password unencrypted (yes/no)?*" { send "no\r";exp_continue; }
}
时间: 2024-10-25 20:04:51

linux利器expect的使用的相关文章

linux tcl expect 安装(转)

linux tcl expect 安装 一.Tcl安装 1.  下载:tcl8.4.20-src.tar.gz http://www.tcl.tk/software/tcltk/downloadnow84.tml 2.解压缩源码包       tar xfvz tcl8.4.20-src.tar.gz 3.安装配置       cd tcl8.4.20/unix       ./configure --prefix=/usr/local/tcl --enable-shared       mak

linux通过expect批量修改密码

公司最近要上一批CDN服务器,需要定期修改密码,原本想用自动化工具来实现这个功能,但是最近比较忙没有时间搞,所以先用脚本的方式来修改,上网搜索了一下,发现大同小异,所以参考网络上脚本做了个测试,结果一个下午没了,坑稍微有点多,在下文我会尽量解释清楚,以避免像我这样的新人掉坑,不多说,正文开始! 系统环境:CentOS Linux release 7.3.1611 (Core) Selinux: disable 执行目录: /home 一 , 需求:linux环境下运行,需要tcl和expect支

Linux使用expect实现自动登录的脚本

前提条件服务器已经安装过tcl和expect, 若未安装:可以先执行 yum  install tcl  expect  进行安装 第一步.编写以下自动登录脚本login.sh ############################################## #!/usr/bin/expectset timeout 10 spawn ssh username@172.16.2.1expect "password:"send "password\r"int

UNIX/LINUX使用expect实现人机自动交互功能

expect用法 [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西. 注意:这一行需要在脚本的第一行. [set timeout 30] 基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒 .timeout -1 为永不超时 [spawn ssh -l username 192.168.1.1] spawn是进入expect环境后才可以执行的

linux下expect环境安装

expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,很实用!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下载:expect-5.43.0.tar和tcl8.4.11-src.tar下载地址:https://pan.baidu.com/s/1kVyeLt9 提取密码:af9p 将expect和tcl的软件包下载放到/usr/local/src目录下 (1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装[[e

用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子

因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子.真是残缺的可以.没有一段是可以正常运行的.我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ############################################## #!/usr/bin/expect set timeo

Linux使用expect实现免手动密码输入,linux免密码登陆

使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理.  脚本代码如下:  ##############################################  #!/usr/bin/expect  set timeout 30  spawn ssh -l username 192.168.1.1  expect "password:"  send "is

Linux - 通过expect工具实现脚本的自动交互

目录 1 安装expect工具 2 expect的常用命令 3 作用原理简介 3.1 示例脚本 3.2 脚本功能解读 4 其他脚本使用示例 4.1 直接通过expect执行多条命令 4.2 通过shell调用expect执行多条命令 5 spawn not found 的解决 1 安装expect工具 expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是: spawn启动指定进程 -> expect获取指定关键字

linux通过expect实现脚本自动交互

1.安装步骤 ①首先,准备好所需的两个安装包 tcl8.4.13-src.tar.gz(链接:https://pan.baidu.com/s/1yTFtr1zZbYkBnIenm-HWGg,提取码:h8ed ) expect-5.43.0.tar.gz(链接:https://pan.baidu.com/s/1ZdJo-nRI_FnUYiMzkKqkhA ,提取码:90g5 ) ②安装tcl8.4.13 Tcl 的 configure 脚本有一个语法错误,下面的命令可以纠正它: sed -i "s