从终端使用 ssh 和 gpg 时,禁止 gnome 在 GUI 中询问密码

Sta*_*arx 11 ssh gnome command-line gnupg 16.10

自从我安装了 Ubuntu Desktop 16.10 Gnome(之前我有 15.10),我一直对这样一个事实感到恼火:每当我尝试添加 SSH 密钥或使用终端导入 GPG 密钥时,都会弹出一个 GUI 弹出框,要求输入密码。

使用 SSH,我通过在终端上启动一个新代理然后尝试添加密钥来解决这个问题。最后,它要求我输入 TTY 中的密码或不是 GUI。

使用 GPG 我刚刚开始学习它,所以不确定如何解决。

有什么方法可以禁用它并让他们在从 TTY 访问时要求在 TTY 中输入密码?

我已经阅读了这个问题中的答案,但它是关于 ubuntu 12.04 的,前两个答案对我不起作用。

Dav*_*ter 14

SSH 和 GPG 使用所谓的“代理”来缓存解密的私钥,这样用户就不必一直输入他们的密码短语。默认情况下,他们将程序pinentry用于此目的。

在我们继续之前,让我们确保您的系统上有一个命令行引脚输入程序的示例。在 Ubuntu 的存储库中,我们有pinentry-curses(自永远)和pinentry-tty(自 Xenial),但默认情况下未安装它们。您可以从同名的包中获取它:

sudo apt install pinentry-curses
Run Code Online (Sandbox Code Playgroud)

设置不同的引脚输入程序

您可以通过以下任一方式调整用于引脚输入的程序:

  • (每个用户)pinentry-program在您~/.gnupg/gpg-agent.conf的命令行输入程序中设置,例如:

    pinentry-program /usr/bin/pinentry-curses
    
    Run Code Online (Sandbox Code Playgroud)

    您需要重新启动代理或让它重新加载其配置:

    gpg-connect-agent <<< RELOADAGENT
    
    Run Code Online (Sandbox Code Playgroud)
  • (系统范围)在包括 Ubuntu 在内的所有常见 Linux 发行版中,默认pinentry程序实际上是指向实际引脚输入程序的符号链接。此符号链接的目标由update-alternatives系统管理。您可以使用它将链接目标更改为命令行引脚输入程序:

    sudo update-alternatives --config pinentry
    
    Run Code Online (Sandbox Code Playgroud)

根据终端的可用性选择密码输入程序

这两种方法的缺点是,如果从没有终端运行的程序(例如图形 SFTP 客户端或邮件用户代理)调用 SSH 或 GPG,您将无法使用命令行 pin 条目。更好的方法是仅在 X 服务器可用而终端不可用时才使用图形 pin 输入程序。为此,我们需要一个小的包装器脚本,在推迟到正确的引脚输入程序之前分析环境。

假设我们有以下可执行的 shell 脚本~/.local/bin/my-smart-pinentry

sudo apt install pinentry-curses
Run Code Online (Sandbox Code Playgroud)

要将这个包装器用作 pin 条目“程序”,您可以使用上面提到的每个用户的方法。您也可以将其添加到update-alternatives数据库中