我应该给sudo命令哪个选项以通过图形界面询问密码?


11

这个问题已经困扰了我一段时间。

有时,我需要编写一个脚本文件来执行sudo命令。我不一定事先知道我会以sudo这种方式运行,所以我确定有一种方法可以打开一个漂亮的图形界面(例如,在安装软件时弹出的界面),但是如何?

man sudo说:

-A          Normally, if sudo requires a password, it will read it from the current terminal.  If the -A (askpass) option is specified, a (possibly
            graphical) helper program is executed to read the user's password and output the password to the standard output.  If the SUDO_ASKPASS
            environment variable is set, it specifies the path to the helper program.  Otherwise, the value specified by the askpass option in
            sudoers(5) is used

因此,我很确定解决方案位于其中-ASUDO_ASKPASS但是我设法找到了要放入其中的元组。


1
在Linux中,这些将由诸如gtksudo或的前端处理kdesudo。我不知道OS-X方面有什么,但我认为您正在寻找符合这些要求的东西。
Caleb,

Answers:


17

OS X没有完全干净的方法来执行此操作,但是有几种伪造它的方法。首先,AppleScript有一个很好的方法来基于图形身份验证执行伪操作,您可以使用以下方法:

osascript -e "do shell script \"stufftorunasroot\" with administrator privileges"

您还可以使用该机制设置sudo时间戳,然后使用常规sudo(在5分钟超时窗口内)执行操作:

osascript -e "do shell script \"mkdir -p /var/db/sudo/$USER; touch /var/db/sudo/$USER\" with administrator privileges" && \
    sudo stufftorunasroot

最后,您可以使用AppleScript提示输入密码,然后将其传递给sudo:

pw="$(osascript -e 'Tell application "System Events" to display dialog "Password:" default answer "" with hidden answer' -e 'text returned of result' 2>/dev/null)" && /
    echo "$pw" | sudo -S stufftorunasroot

等待了这么久才有了这个很棒的提示
apouche 2011年

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.