如何通过写shell自动切换到root 用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过写shell自动切换到root 用户相关的知识,希望对你有一定的参考价值。

参考技术A 不要写成 bash 脚本,直接写 expect 脚本就行了。
#!/usr/bin/env expect
spawn su -
expect ":"
send "redhat\r"

interact本回答被提问者采纳
参考技术B 除非你知道密码,要不然没用。

shell中调用expect 我编写了一个普通用户切换到root的脚本。

#!/bin/bash
expect <<!
spawn su -
expect ":"
send "redhat\r"
expect eof
!
能够实现从普通用户切换到root,但问题是切换过去后系统5秒钟后自动又从root切换到原先的普通用户了。这是为什么,怎么解决呢???

在bash 中直接执行expect 应该使用 -c 选项,而不是使用重定向。
# expect -c \'
spawn su -
expect ":"
send "passwdXXXX\\n"

interact
\'
你这种想法也算不上托裤子放屁,既然expect 提供了 -c 选项,就说名直接在bash 中调用expect 的大有人在。
参考技术A #!/bin/bash
expect <<!
spawn su -
expect ":"
send "redhat\r"
expect eof
interact
wait
!追问

还是不行,还是那样有问题。

参考技术B 不要写成 bash 脚本,直接写 expect 脚本就行了。

#!/usr/bin/env expect

spawn su -

expect ":"
send "redhat\r"


interact追问

哦,这种可以我试过的,我是想在#!/bin/bash中调用expert来实现。但是始终有问题,不过还是很谢谢你了。

追答

首先,你这种想法就是脱裤子放屁。

其次,如果一定要在bash脚本中调用 expect, 那也不能用 here document,在 here document 最后一行bash会关闭expect的输入,导致 expect 需要读取输入时 (interact 语句),发现输入文件已经结束,就会退出。可以把下面的内容存入文件,比如 a.exp 中

spawn su -
expect ":"
send "redhat\r"

interact

然后在 bash 脚本中
#!/bin/bash
expect a.exp
这样就能在 bash 中调用 expect 并保持 su - 的session不退出。但是,这显然多此一举。

本回答被提问者和网友采纳

以上是关于如何通过写shell自动切换到root 用户的主要内容,如果未能解决你的问题,请参考以下文章

如何写个linux shell脚本自动重启系统

shell中调用expect 我编写了一个普通用户切换到root的脚本。

android如何通过adb shell 模拟home键盘切换应用?

Linux登录自动切换root账户与历史命令优化

如何切换到root用户

linux自动巡检脚本之用户切换后的命令执行