文件:test.sh
who
su superuser <<BELUGA
mysuperpassword
BELUGA
who
$./test.sh
只是等待输入。我做错了什么?有没有办法自动化这个?
答案1
您想使用“expect”命令传递您的用户名和密码。
但请注意,你在那里要做的事情似乎不是一个好方法。如果你能更详细地阐述一下你想要解决的原始问题,也许我们可以更好地帮助你。
答案2
我认为安装/使用 sudo 并配置允许 NOPASSWD 执行您尝试自动执行的特定操作会更好。
通过 sudo 允许执行特定命令比将 root 密码存储在某个文本文件中要安全得多。
答案3
以用户身份运行脚本并让其将权限升级为 root 可能不是一个好主意。更好的解决方案是以 root 身份运行脚本并根据需要降低其权限:
#!/bin/sh
UN=user
whoami
sudo -u $UN whoami
当以 root 身份运行时(假设user
是有效用户),输出应如下:
root
user
然而,如果您确实希望以用户身份运行脚本并能够以 root 身份执行命令,那么我知道有两个选项。
使用存储的密码进行 sudo 操作:
#!/bin/sh whoami sudo -S -p "" whoami <<EOF mysuperpassword EOF
将输出(以“用户”身份运行时):
user root
使用 sudo 而不输入密码。
将您希望以 root 身份运行的命令列表添加到文件中/etc/sudoers
。visudo
例如,要允许user
运行命令apache2ctl
和whoami
,请添加以下内容:User_Alias SPECIAL = user Cmnd_Alias SPECIAL_COMMANDS = /usr/sbin/apache2ctl, /usr/bin/whoami SPECIAL ALL = NOPASSWD: SPECIAL_COMMANDS
或者如果你真的信任
user
,例如如果你就是你,你可以允许用户无需密码执行任何命令:user ALL=(ALL) NOPASSWD: ALL
然后当运行以下脚本时
user
:#!/bin/sh whoami sudo whoami
它将输出:
user root