su 使用此处的文档

su 使用此处的文档

文件: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 身份执行命令,那么我知道有两个选项。

  1. 使用存储的密码进行 sudo 操作:

    #!/bin/sh
    whoami
    sudo -S -p "" whoami <<EOF
    mysuperpassword
    EOF
    

    将输出(以“用户”身份运行时):

    user
    root
    
  2. 使用 sudo 而不输入密码。
    将您希望以 root 身份运行的命令列表添加到文件中/etc/sudoersvisudo例如,要允许user运行命令apache2ctlwhoami,请添加以下内容:

    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
    

相关内容