该sudo -A
(SUDO_ASKPASS)选项显然原因sudo来失去的超时时间(例如,timestamp_timeout)设置。
我想使用sudo -A选项,但是我想在bash脚本中保留默认超时(例如,在Ubuntu上为15分钟)。我想在GUI对话框中安全地输入用户密码,但是我只想输入一次脚本(而不是50次以上)。
此外,我不想以root用户身份运行整个脚本,因为我只是认为这是一个坏主意。此外,在这种情况下,由我的脚本创建的文件拥有错误的所有权。
如果sudo -A选项保留了默认超时,它将对我有用。
从sudo手册中:
选项:‑A
通常,如果sudo需要密码,它将从用户终端读取密码。如果指定了-A(询问)选项,则将执行(可能是图形的)帮助程序来读取用户的密码并将密码输出到标准输出。如果设置了SUDO_ASKPASS环境变量,则它指定帮助程序的路径。否则,如果/etc/sudo.conf包含指定askpass程序的行,则将使用该值。例如:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
顺便说一句,kdesudo也有同样的问题-每次调用它时都要求输入密码,即使在同一脚本中稍晚一秒钟也是如此。
我正在使用Kubuntu 12.04 64位。
这是解决方案所有部分的完整工作示例。它由bash脚本,此处建议的“ myaskpass”脚本和“ .desktop”文件组成。整个过程应该是100%GUI(完全没有终端交互),因此.desktop文件至关重要(afaik)。
$ cat myaskpass.sh
#!/bin/bash
kdialog --password "Please enter your password: "
exit 0
$ cat askpasstest1.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=SUDO_ASKPASS tester1
Exec=bash /home/user/test/askpasstest1.sh
GenericName=SUDO_ASKPASS tester1
Name=SUDO_ASKPASS tester1
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Categories=Application;Utility;
X-KDE-SubstituteUID=false
X-KDE-Username=
还有测试脚本本身。使用此解决方案时,此用户将两次询问您的密码。
#!/bin/bash
sudo -k
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass1
touch filemadeas_regularuser1
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass2
touch filemadeas_regularuser2
ls -la filemadeas* > /home/user/test/fma.log
kdialog --title "Files Created" --textbox /home/user/test/fma.log 640 480
sudo rm filemadeas_*
rm fma.log
exit 0
kdesudo
遭受我上面描述的相同问题。我正在进行测试sudo -A
以替代kdesudo
它,这对我的情况更好,但是它不能解决超时问题(至少到目前为止)。
gksudo
不是一个不错的选择?linux.die.net/man/1/gksudo