如何在RedHat Bash脚本中切换至root执行指定命令
在RedHat Bash脚本中切换root执行命令的解决方法
推荐方案:使用sudo(安全且灵活)
su命令需要交互式输入密码,且直接切换shell会导致脚本后续逻辑中断,更安全的方式是用sudo给普通用户授权执行特定root命令:
- 编辑sudo配置文件(必须用
visudo,避免语法错误导致sudo失效):visudo - 在文件末尾添加一行,授权你的普通用户无需密码执行
vgdisplay命令(替换your_username为实际用户名):your_username ALL=(ALL) NOPASSWD: /sbin/vgdisplay - 保存退出后,脚本里直接调用sudo执行目标命令:
# 普通用户逻辑... # 需要root权限的命令 sudo vgdisplay -v | grep "LV Status" # 继续普通用户逻辑...
不推荐方案:用su结合密码输入(安全风险高)
如果必须用su,需要通过-c参数指定要执行的命令,避免进入交互式root shell:
- 明文密码方式(强烈不建议,密码易泄露):
echo "your_root_password" | su - root -c "vgdisplay -v | grep 'LV Status'" - 用expect自动输入密码(仍需明文密码,需先安装expect):
先安装expect:
脚本中添加:sudo yum install -y expectexpect << EOF spawn su - root -c "vgdisplay -v | grep 'LV Status'" expect "Password:" send "your_root_password\r" expect eof EOF
为什么原脚本root部分没执行?
你直接写su - root会启动一个全新的root登录shell,脚本会卡在这个交互界面,不会继续执行后续命令。必须用su - root -c "命令"的形式,让su执行完指定命令后立即返回原用户shell,脚本才能继续运行。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

