一、切换root用户的脚本需求:Shell脚本不能通过root用户执行,只能通过普通用户执行。但是脚本中的某些命令需要时root权限。
想法:在执行需要root权限的命令时切换到root用户 或者 拿到root权限。
1、安装expect
yum install -y expect
expect 的用法参考这篇文章:
Linux expect 介绍和用法 - 梦徒 - 博客园 (cnblogs.com)https://www.cnblogs.com/saneri/p/10819348.html
2、编写脚本
## switchRoot.sh 脚本内容 #!/usr/bin/expect ## 只有先进入expect环境后才可执行spawn ## 不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待1秒 set timeout 1 ## 切换root用户 spawn su root ## 判断上述进程(su kevin)的输出结果中是否有“Password”的字符串(不区分大小写)。 ## 若有则立即返回,否则就等待一段时间后返回,等待时长就是开头设置的1秒 expect "Password:" ## 向上面的进程(su kevin)发送字符串中的密码, 并且自动敲Enter健(r) send "root123456r" interact
3、效果
4、问题
当你在执行一个Shell脚本时,为了获取root权限而切换root用户时,会导致脚本中止。这显然不是我们想要的,因此我们可以选择使用 sudo 命令来临时获取root 权限。
二、获取root权限(sudo)的脚本## sudoUser.sh 脚本内容 #!/usr/bin/expect set timeout 1 ## sudo命令会返回的提示信息的一部分 expect "password for" ## 当前用户的密码 send "dhj123456r" interact
注意:并非所有用户都能使用sudo命令。
具体参考这篇文章:(4条消息) 解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported._心之所向,一如既往-CSDN博客https://blog.csdn.net/sinat_36118270/article/details/62899093
三、测试效果新建test.sh脚本,内容如下:
#!/bin/bash echo "-------------- start." ## 打印root用户home目录的abc.txt文件 ## 这个文件只有root能查看和修改,其他用户需要通过sudo来暂时获取root权限 sudo cat /root/abc.txt ## 调用暂时获取root权限的脚本 ./sudoUser.sh echo "------------ end." exit
效果
参考文章:
(4条消息) 如何在linux shell脚本中自动输入密码._Tony_仔仔 的博客-CSDN博客_linux shell 输入密码https://blog.csdn.net/qq_31598113/article/details/80326973



