我遇到了一个问题:
我有一个文件 .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 命令都不需要提供另一个密码。