【发布时间】:2023-10-11 18:35:02
【问题描述】:
我正在编写一个脚本来使我的系统保持最新。在脚本中,我打开一个新的 gnome-terminal 以在那里执行代码,因为我确实想要输出,但不是在我的主终端窗口中。但是,我似乎无法使用 sudo 密码。这是我的脚本:
echo "Please provide me with your SUDO password"
#make password variable for later use.
read password
echo "Updating your package information.."
gnome-terminal --quiet --wait -- echo "$password" | sudo -S apt-get update
echo "Command executed."
echo -e "Upgrading packages.."
#etc..
当我在“新”终端中回显密码时,它确实有效,我可以看到密码(或任何变量)就好了。然而,上面的结果总是 sudo: no password was provided.
我不想禁用我的 sudo 密码,并且执行的命令必须在新窗口中。
【问题讨论】:
-
我没有测试,但是看起来像这个命令:
| sudo -S apt-get update是在运行脚本的窗口中执行的,而不是在新终端中。为什么不直接输入gnome-terminal --quiet --wait -- sudo apt-get update并将密码输入新终端? -
另请注意
echo "$password" | sudo -S apt-get update是高度不安全的,因为您可以在进程列表中看到密码,并且某些恶意软件可以检测到该密码并且使用 sudo 密码...它可以对您的计算机执行任何操作。跨度> -
@MichalH 是否会在全新安装后直接执行一次脚本?
-
不那么安全,但仍然是不好的做法。这应该是安全的:
sudo -S apt-get update <<< "$password". -
@MichalH 不幸的是,这不起作用,因为它仍然在新的终端窗口中提示我输入密码。我不想输入密码的原因是因为我的脚本会打开多个窗口,其中一些(大约 10 个窗口)需要 sudo 密码。