用expect 实现切换用户时自动输入密码

一、 安装expect

expect作为一种交互性很强的脚本语言,它依赖于tcl,但linux系统里一般不自带安装tcl,需要手动安装。

expect版本 5.43

http://download.chinaunix.net/download/0003000/2845.shtml

tcl版本 8.4.19

http://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz/download

下载两个包,分别解压

1. 先安装tcl

  进入tcl解压目录,然后进入unix目录

  #./configure

  #make

  #make install

2. 后安装expect

  进入expect解压目录,红色字符为当前目录

  #./configure --with-tclinclude=/*****/tcl8.4.19/generic/ --with-tclconfig=/usr/local/lib/

  #make

  #make install

完成,测试

  #expect

  expect1.1> 

到这里,expect安装完成。

二、自动切换用户
实现从普通用户“test”切换到root用户,自动输入root的密码,不用在终端提示符下执行密码输入操作。
vi autosu.sh进入脚本编辑:

#! /usr/bin/expect -f      //指定expect工具的路径,如果不清楚具体路径,可以用"which expect"命令来查看。

set timeout 10    //
spawn sudo su -          // 在expect 中用"spawn"关键字来调用命令“su - ”
expect ":"                    //判断上次输出结果里是否包含“:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的10秒
send "rootpasswd\r"    //这里expect用send将你的root密码自动输入到上面的提示符之后。
interact                       //操作完成。

三、一般用户开机,自动启动root权限脚本

1、编辑切换用户脚本

#! /usr/local/bin/expect
set timeout 10
spawn sudo su -
expect ":"
send "123456\r"          #root密码
expect "#"
send "cd /home/youruser\r"   #脚本所在的目录
expect "#"
send "./autostart_root.sh\r"  #脚本运行
expect "#"
send  "echo $?\r"
sleep 10
interact

2、添加开机自启动项

vi /etc/init.d/rc.local,在文件末尾加上:

/home/youruser/autostart_root.sh 

>>参考来源,请点击这里

转载于:https://www.cnblogs.com/Amagasaki/p/3499003.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
昨天一个网友问如何能够将输入密码的工作在shell里面自动完成,研究了一下,发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定,所以初步学习了一下expect,成果和大家分享一下: 应用一: 实现从普通用户“test”切换到root用户,自动输入root的密码,不用在终端提示符下执行密码输入操作。 步骤: (1)vi autosu.sh (2)#! /usr/bin/expect -f //指定expect工具的路径,如果不清楚具体路径,可以用"which expect"命令来查看。 spawn su - // 在expect 中用"spawn"关键字来调用命令“su - ” expect ":" //在执行了su - 命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect ":",或者expect -exact "口令:" send "rootpasswd\r" //这里expect用send将你的root密码自动输入到上面的提示符之后。 interact //操作完成。 注意:这里强调一下执行脚本要注意的地方,不能按照习惯来用sh ***.sh来这行expect的程序,会提示找不到命令,因为expect用的不是bash所以会报错。执行的候直接./***.sh就可以了。~切记! 应用二: 从普通用户切换到root之后,执行“ls”操作,调用执行aaa.sh,返回执行结果,间隔10S。 #/usr/bin/expect -f spawn su - // 在expect 中用"spawn"关键字来调用命令“su - ” expect ":" //在执行了su - 命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect ":",或者expect -exact "口令:" send "rootpasswd\r" //这里expect用send将你的root密码自动输入到上面的提示符之后。 expect "#" //当遇到提示符以#结尾,即为root权限; send "ls\r" //expect 用spend方法调用ls 命令,并且回车(“\r”) expect "#" send "sh aaa.sh\r" //调用sh aaa.sh,即执行一个脚本文件aaa.sh。 expect "#" send "echo $?\r" sleep 10 interact
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值