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
数据库中。