sudo 是否可以从 gnome-keyring 或类似的读取密码

sudo 是否可以从 gnome-keyring 或类似的读取密码

我目前在一堆脚本中大量使用 sudo,这变得有点麻烦,因为某些脚本不允许交互式输入(例如,Makefile)。

我认为如果可以使用 gnome-keyring 或一些类似的密钥环软件来记住密码,而不是完全禁用 sudo 密码,那就太好了。这是一个好主意吗?是否可以?有更好的解决办法吗?

答案1

结合和 程序-A的选项,您所要求的听起来是可行的。sudognome-keyring-query

基本上,如果您使用该选项-A,则不是从标准输入读取密码,而是sudo从可以使用SUDO_ASKPASS环境变量指定的外部程序读取密码。

该外部程序可以是gnome-keyring-query一个用于存储/获取密码的命令行工具gnome-keyring。这是以下的帮助gnome-keyring-query

Usage:
    gnome-keyring-query <mode> <name>
Parameters:
    mode     - either 'get' or 'set' (without quotes)
    name     - a name to identify the key
Notes:
    If mode is 'get', then the password is dumped to stdout.
    If mode is 'set', then the password is read from stdin.

这是您可以继续的方法(我刚刚尝试过,它有效)。

  1. 安装 gnome-keyring-query (如果您的发行版未打包它,则必须编译它-> 上游网址
  2. 将您的 sudo 密码保存在 gnome-keyring 中
  3. 您应该能够通过以下方式从密钥环中检索密码:gnome-keyring-query get sudo
  4. 将此命令保存为脚本(例如在 /usr/bin/sudo_askpass 中)并确保它可以使用 chmod 执行
  5. export SUDO_ASKPASS=/usr/bin/sudo_askpass
  6. 使用sudo -A而不是 sudo。

话虽这么说,请注意,如果您将密码保存在密钥环中并保持此密钥环打开,任何人都可以非常轻松地读取您的 sudo 密码,无论是使用此 gnome-keyring-query 工具,还是只需启动 seahorse。所以要非常小心。

答案2

sudo 提供了一个超时选项。

/etc/sudoers:

Defaults:username timestamp_timeout=time_in_minutes

如果您想保留 root 权限,只需以 root 身份启动脚本即可。我同意,这不是最佳的,但这是实际上你已经在做什么。

相反,我宁愿将所有无需 root 权限即可完成的操作和那些请求 root 权限的操作组合在一起,并在两个不同的时间启动它们......这就是通常所做的:

./configure
make
sudo make install

顺便说一句,如果您使用的是 Xorg 系统,则可以使用 gksudo 而不是 sudo。但同样,将“sudo”隐藏在脚本中并不是一个好的做法。

答案3

我在用经过为我的 sudo 命令提供密码。如果你想做同样的事情:

将以下脚本另存为~/.local/bin/sudo-askpass

#!/bin/bash
pass show hosts/$(whoami)@$(hostname) | head -n1

shell rc 文件中sudo的别名sudo --askpass

# bashrc or zshrc
export SUDO_ASKPASS=sudo-askpass
alias sudo='sudo --askpass'

保存密码pass edit hosts/$(whoami)@$(hostname)

相关内容