文档章节

Linux交互命令工具expect与自动切换登录用户

YuanyuanL
 YuanyuanL
发布于 2016/12/07 10:25
字数 1143
阅读 147
收藏 0
点赞 0
评论 0

linux expect 安装 Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管 理方面发挥很大的作用。 spawn命令激活一个Unix程序来进行交互式的运行。  send命令向进程发送字符串。 expect 命令等待进程的某些字符串。  expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作.

A. Tcl 安装 
主页: http://www.tcl.tk
下载地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml

1.下载源码包
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz

2.解压缩源码包
tar xfvz tcl8.4.11-src.tar.gz

3.安装配置
cd tcl8.4.11/unix
./configure --prefix=/usr/tcl --enable-shared
make
make install

安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。 暂时不要删除tcl源代码,因为expect的安装过程还需要用。

B. expect 安装 (需Tcl的库)
主页: http://expect.nist.gov/
1.下载源码包
wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download

2.解压缩源码包
tar xzvf expect5.45.tar.gz

3.安装配置
cd expect5.45
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic
make
make install
ln -s /usr/tcl/bin/expect /usr/expect/bin/expect

自动切换登陆用户的脚本与执行 如何能够将输入密码的工作在shell里面自动完成,研究发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定:

例子:

实现从普通用户“test”切换到root用户,自动输入root的密码,不用在终端提示符下执行密码输入操作。
步骤:
(1)创建并打开脚本文件
vi autosu.sh   

(2)编辑脚本内容
#!    /usr/expect/bin/expect     -f        //指定expect工具的路径,如果不清楚具体路径,可以用"which expect"命令来查看。
spawn    su   -                                //  在expect 中用"spawn"关键字来调用命令“su - ” 
expect     ":"                                      //在执行了su   -  命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect    ":",或者expect    -exact    "口令:"
send     "rootpasswd/r"                    //这里expect用send将你的root密码自动输入到上面的提示符之后。
interact     
                                       //操作完成。
  (3)执行脚本文件
./autosu.sh
注意:执行脚本时要注意的地方,不能按照习惯来用sh **.sh来这个expect的程序,会提示找不到命令,因为expect用的不是bash所以会报错。执行的时候直接./**.sh就可以了。

Linux Expect命令详解:

http://www.xuetimes.com/archives/781 http://www.tuicool.com/articles/63iy2m

Linux/Unix 程序退出状态详解:

http://blog.csdn.net/Hadas_Wang/article/details/43601981?locationNum=2

附注:

对于 *NIX 系统而言,每一条命令,不管是内置的,SHELL 函数还是外置的,当它退出时,都 会返回一个小整数给引用它的程序,这就是程序退出状态 ( exit status ).

一般来讲,退出状态 0 表示正常执行,没有遭遇任何问题。其他非零的状态码均表示失败。

在 shell 中,可以使用 $? 来访问最后一个程序的退出状态。

下面是 POSIX 的结束状态:

退出状态码	含义
0	        命令成功退出
> 0	        在重定向或者单词展开期间(~、变量、命令、算术展开以及单词切割)失败。
1 – 125	命令不成功退出。特定的退出值的含义,有各个命令自行定义。
126	        命令找到了,但是文件无法执行。
127	        命令没有找到
> 128	命令因收到信号而死亡。
POSIX 没有定义 128 的状态码,仅要求它表示某种错误。因为只有低位的 8 个位会返回给父进程,因此,所有大于 255 的退出状态都会被对 256 取模,然后将其结果作为实际的 exit status code.

在 shell 脚本中,可以使用 exit integer_value 这种方式声明退出状态。如果没有显式地声明,则会以最后一个程序的退出状态作为当前脚本的退出状态。也可以使用 exit $? 来表示。

Expect 的默认Exit value为0: exit 等价于 exit 0 因此,当expect中执行了子命令时(如shell命令),要想在expect退出时得到子命令的退出状态,就需要再Exepect退出时对exit value重新赋值。

赋值方法:待续。。

© 著作权归作者所有

共有 人打赏支持
YuanyuanL

YuanyuanL

粉丝 151
博文 225
码字总数 187115
作品 0
济南
部门经理
教会你Linux Shell自动交互的三种方法

你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下。 一、背景...

魏邪乎 ⋅ 2014/02/13 ⋅ 0

linux expect详解(ssh自动登录)

shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expectspawn ssh root@192.168.22.194expect "password:"send "123r"expect "#"interact Expect是一个用来处理交互的命令。借助Expect,...

独钓渔 ⋅ 2016/03/31 ⋅ 0

linux 远程自动化部署

#!/usr/bin/expect -f set timeout 60set f [open ./ip r]while { [gets $f line ] >=0 } { set ip [lindex $line 0] #echo "开始启动$ip的服务" spawn scp push.war jeeker@$ip:/home/jeeke......

kongjun ⋅ 2016/01/08 ⋅ 2

[linux comm]expect

Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。下文我们首先提出一个问题,然后介绍基础...

SibylY ⋅ 2015/03/04 ⋅ 0

expect使用详解

linux expect的使用详解 一、概述   我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如tel...

临峰不畏 ⋅ 2015/10/31 ⋅ 0

pexpect的讲解

登录 | 注册 IBM 技术主题 软件下载 社区 技术讲座 搜索 developerWorks 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 Digg Facebook Twitter Linked In developerWorks 中国 ...

gengyeh ⋅ 2017/03/13 ⋅ 0

expect实现自动交互由浅入深

expect实现自动交互由浅入深 作为运维人员可以通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如t...

JAYZ_HAO ⋅ 2017/10/14 ⋅ 0

Linux运维Expect介绍 Linux云计算学习

  Expect是基于Tcl的相对简单的一个免费的脚本程序工具语言,是一个用来实现自动化交互功能的软件套件。比如SSH、FTP等,这些程序正常情况都需要手工与其交互,而使用Expect就可以模拟人工...

zhouzhou2018 ⋅ 05/22 ⋅ 0

shell expect的简单用法

为什么需要expect? 我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进行交互...

PlayWithYou ⋅ 2017/10/01 ⋅ 0

expect实现命令行简单交互

在服务器开发中,有时候需要自动同步另一个服务器的一个文件,这时候就需要通过scp来把文件复制到当前服务器目录下,如: scp需要认证用户名和密码,可以通过在对方服务器通过密钥对来验证不...

lxfeng ⋅ 2016/06/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 51分钟前 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部