当访问被拒绝时,Sudo 已经告诉用户:
[jayman@this-machine:~]$ sudo echo hi
[sudo] password for jayman:
Sorry, try again.
[sudo] password for jayman:
Sorry, try again.
[sudo] password for jayman:
sudo: 3 incorrect password attempts
[git@this-machine:~]$ sudo echo hi
Sorry, user git may not run sudo on this-machine.
但是,Sudo 不会告诉用户何时授予访问权限。考虑sudo dd if=foo of=bar
运行时会发生什么。对我来说,会发生以下两件事之一:
- Sudo 提示我输入密码。我输入密码并看到终端转到下一行,但
dd
有一段时间没有输出任何内容。我最终等待了几秒钟,以确保 Sudo 不会等待说“抱歉,请重试”并再次提示我输入密码。 - Sudo 不会提示我输入密码,因为我的凭据已缓存。
dd
有一段时间没有输出任何东西。我最终等待了几秒钟,以确保 Sudo 不仅仅需要一段时间来提示我输入密码。
如果 Sudo 在我的密码被接受后打印一条消息,那么我就不必等待弄清楚是否已经dd
开始。有什么方法可以让 Sudo 在授予访问权限后打印消息吗?
答案1
我最终创建了一个名为的 Bash 脚本sudo
:
set -e
console="$(tty)"
readonly console
/path/to/real/sudo -v
# Sudo normally writes directly to the terminal device instead of
# writing to stdout, so that’s what I’m doing here
echo Access granted. &> "$console"
/path/to/real/sudo "$@"
然后,我将我的设置PATH
为"/path/to/fake/sudo/dir:$PATH"
.此解决方案有一些限制:
- 如果禁用凭证缓存,它将无法正常工作。
- 如果您的凭据未缓存,则
sudo --help
或sudo -k
将提示输入密码。