linux expect自动切换用户

背景

我需要写这样一个脚本

切换用户
kill一个进程
执行一个sh脚本
退回原用户

但是又不想在切换用户的时候手动输入密码,于是我找到了expect这样一个东西。它可以实现自动向服务器中输入的功能。

安装

我用的是这个
https://www.cnblogs.com/daojian/archive/2012/10/10/2718390.html
安装的时候注意命令中的版本号要与自己的保持一致。

编写脚本

vi test.sh

#!/usr/expect/bin/expect -f
set timeout 1
spawn su - root

expect ":"
send "密码\n"
expect "#"
send "ps -ef|grep xxxxxxxxx|grep -v grep|awk '{print \$2}'|xargs kill -9\r"
send "sh /xxx/xxx.sh\r"
send "exit\r"
send "cd /home/xxx\r"

set timeout 1 是设置超时时间。默认是10秒,它会在10秒后自动完成输入操作。我将它设置成了1秒

set timeout 1

设为 -1 时为不限时。

set timeout -1

执行
/home/xxxx/test.sh

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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
Linux的shell脚本中,可以使用su命令来切换用户。下面是一个示例脚本: ``` #!/bin/bash echo 'su user\[root\]!' expect -c " spawn su - root expect \":\" send \"password\r\" interact " echo "ok!" ``` 在这个脚本中,使用了expect命令来自动输入密码并切换到root用户。首先,使用spawn命令启动su - root命令,然后使用expect命令等待输入密码的提示符。接下来,使用send命令发送密码,注意要将password替换为实际的密码。最后,使用interact命令交互模式,以便在切换到root用户后可以执行其他命令。\[1\] 另外,还可以使用su命令的-c选项来在切换用户后执行指定的命令。下面是一个示例脚本: ``` #!/bin/bash whoami su - yanu <<EOF whoami # 在这里可以执行其他命令 EOF whoami ``` 在这个脚本中,首先使用whoami命令查看当前用户,然后使用su - yanu命令切换到yanu用户,并在EOF和EOF之间的代码块中执行其他命令。切换用户后,再次使用whoami命令查看当前用户。\[2\] 如果你想在脚本中使用expect自动输入密码,可以参考这个链接中的示例代码:http://qyiyunso.blog.163.com/blog/static/350776862009112395940647/。其中的核心代码可以帮助你实现自动输入密码并切换用户的功能。\[3\] #### 引用[.reference_title] - *1* [linux shell切换用户脚本](https://blog.csdn.net/ardo_pass/article/details/80117420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [shell 脚本之切换用户](https://blog.csdn.net/Augusdi/article/details/45692391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值