sudo 命令以及如何自动获取密码

sudo 命令以及如何自动获取密码

我遇到了一个问题:

我有一个文件 .sh

    #!/bin/bash 

var=$(zenity --forms --title="Tắt giờ vợ yêu nhé" \
    --text="Vợ muốn tắt máy sau bao nhiêu phút nữa" \
    --separator="," \
    --add-entry="Vợ điền số vào đây")
case $? in
    0)  sudo shutdown -h $var           
    ;;
    1)
        exit 0;;
    -1)
        echo "An unexpected error has occurred."
    ;;
esac

sudo 命令如何从 echo 命令或文件中自动填充密码。我读过有关 sudo -S 选项的信息,但我不知道它是如何工作的。任何人都可以举个例子!谢谢大家

答案1

最好更改 sudo 规则,而不是将清除密码存储在文本文件中:

创建新文件/etc/sudoers.d/script_rights并推送

%user ALL = NOPASSWD:/sbin/shutdown

其中 user 是允许运行 script.sh 的用户。然后脚本将不会要求输入密码来运行关机命令。

答案2

不是很安全,在我给出答案之前先说一下,因为有人可以打开文件并查看密码,但方法如下:

假设我们想执行命令sudo shutdown -h 1但不想输入密码。我们可以这样做:

echo PASSWORD | sudo -S shutdown -h1

例如,如果我的密码是X那么它看起来应该是这样的:

echo x | sudo -S shutdown -h1

另一个例子是,如果我想执行 apt-get update 然后升级而不输入任何密码。我会这样做:

echo x | sudo -S apt-get update && sudo apt-get upgrade

第一个 sudo(带有 -S 参数的那个)将从标准输入(在本例中为终端中的键盘)获取密码。然后它将保存剩余终端会话的密码。由于在此会话中我执行了 2 个 apt-get 命令,一个带有 update,另一个带有 upgrade,因此无需为第二个 apt-get 再次输入密码,因为密码对于正在使用的会话是有效的。因此,在会话关闭之前(直到您关闭终端或使用密码的脚本结束),其余的 sudo 命令都不需要提供另一个密码。

相关内容