在bash脚本中以图形方式询问密码并保留默认的sudo超时设置


9

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

2
gksudo不是一个不错的选择?linux.die.net/man/1/gksudo
slm

我正在使用KDE,所以gksudo对我来说不是一个选择,但有人告诉我它的工作方式与kdesudo相同。kdesudo遭受我上面描述的相同问题。我正在进行测试sudo -A以替代kdesudo它,这对我的情况更好,但是它不能解决超时问题(至少到目前为止)。
2013年

Answers:


7

我将此添加到我的bash脚本中:

# ask for password up-front.
sudo -v
# Keep-alive: update existing sudo time stamp if set, otherwise do nothing.
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &

在这里找到它:

/server/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

https://gist.github.com/cowboy/3118588

我使用另一个脚本启动主脚本,并使用.desktop文件启动该辅助脚本。它不是很简单,但是可以使它可以100%使用GUI。我仍在寻找完美的解决方案,但是现在就可以解决问题。


1

gksudo怎么样?

$ gksudo your_app_launcher.sh

它确实显示了用于安全输入管理员密码的图形对话框。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.