如果没有 ssh-agent,我的 ssh 密钥如何解锁?我该如何解决这个问题?

如果没有 ssh-agent,我的 ssh 密钥如何解锁?我该如何解决这个问题?

我有一个几乎每天都使用的 SSH 密钥,最近我发现我已经很长一段时间没有解锁它了。我并不总是关闭计算机,因此当我访问服务器时 ssh-agent 已经在运行是很常见的。但我现在已经确认,实际上我从未被要求输入密码。

我感觉自己有点失去理智了,因为……

  • ps aux | grep agent不显示ssh-agent正在运行。
  • ssh-keygen -y要求输入密码,但我期望的密码不起作用。
  • ssh [email protected]立即连接。

目前没有什么特别敏感的问题,尽管这是暂时的。

我应该在这里寻找什么?即使在重新启动后,我的密钥在没有密码的情况下如何工作?我假设我在这里做了一些事情,但是我怎样才能知道我做了什么?

根据评论,我确实运行了echo $SSH_AUTH_SOCK,但我看到/run/user/1000/keyring/ssh-lsof /run/user/1000/keyring/ssh没有返回任何内容,所以我不知道是什么打开了它。

如何确保我的钥匙不会被解锁?

答案1

我也有同样的困惑,并设法发现发生了什么事。

首先,我想知道为什么ssh-agent它会自动运行,所以我ps使用该f标志运行来查看其他进程分叉(生成)ssh-agent

ps auxf | grep ssh-agent -C3

结果是:

foobar      4478  0.0  0.0 602792  7748 ?        SLl  Jun07   0:01 /usr/bin/gnome-keyring-daemon --daemonize --login
foobar    576058  0.0  0.0   7492  4872 ?        S    01:24   0:00  \_ /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh

然后我研究了gnome-keyring-daemon(产生的过程ssh-agent)并看到了以下维基页面:

https://wiki.gnome.org/Projects/GnomeKeyring/Ssh

基本上:GNOME Keyring Daemon 是一个永久的每用户服务,它加载 SSH-Agent 的永久每用户实例,从而使您的密钥在内存中保持解锁状态。这意味着您不必每次打开另一个终端窗口时都繁琐地输入 SSH 密钥的密码,因为 SSH 代理会在整个会话期间将所有未锁定的密钥保留在内存中。

它生成的 SSH 代理还会永久监视~/.ssh(但不监视子文件夹)新的密钥文件(.pub根据文档,任何具有关联文件的新文件)。这意味着它会自动向您的 SSH 代理添加新密钥,而无需手动运行ssh-add文件。如果您运行ssh-add -l以列出将新文件放入文件夹之前和之后的所有键,您可以看到这一点~/.ssh。它会立即自动显示。

默认情况下,GNOME Keyring Daemon 在 Fedora Workstation 36(我的操作系统)上安装并启用。

我实际上很感激,因为这意味着我可以享受受密码保护的~/.ssh密钥文件,而不必不断地输入密码。如果恶意应用程序窃取了我的密钥文件,他们将不会拥有密码,因为这些密码安全地存储在 ssh-agent 的内存中。

这也意味着我可以使用受密码保护的 SSH 密钥来执行必须在后台无人值守运行的操作(例如计划的 Borg 备份作业)。由于 GNOME Keyring Daemon 的工作原理,它会自动解密受密码保护的密钥,无需用户干预。

基本上,您的所有 SSH 密钥都受到“静态”保护(在磁盘上加密)。没有任何缺点。

每当尝试 SSH 连接时,GNOME Keyring Daemon 都会按如下方式处理它:

  • 如果这是第一次使用该密钥,或者密码未存储在您的密钥环中,则会显示此窗口,要求您使用密码手动解锁密钥:

密钥认证

  • 如果您输入密码并点击“解锁”,它将保持解锁状态,直到您注销/重新启动计算机。当您下次登录计算机时,一旦再次使用该密钥,系统就会要求您输入 SSH 密码。

  • 如果您启用“每次登录时自动解锁此密钥”,则密码将存储在您的个人 GNOME 密钥环中,并且每次登录时都会自动解锁,如果您需要立即使用该密钥而无需使用该密钥,那么这非常有用。用户干预。而且它仍然是安全的,因为密钥始终在磁盘上加密!

这是字面上地尽可能完美。

PS:还有很多人谈论的另一种变体;丰图的“钥匙链“项目,但截至撰写本文时,它自 2018 年 1 月(差不多 5 年前)以来就没有更新过。自从很多人谈论它以来,我一直在关注它,但相比之下它非常有限(仅通过以下方式在终端内运行)你~/.bashrc而不是在登录时永久运行),因此无法处理诸如备份任务之类的事情,因为我不知道 GNOME 已经拥有完美且积极维护/开发的gnome-keyring-daemon服务,我很感激。我不必使用 funtoo 过时的钥匙串,因此“开箱即用”,这对我来说是个好消息!

基本上,今天我知道了有多棒gnome-keyring-daemon

如果您确实想禁用它,我链接到的 wiki 页面有说明。但我不明白为什么,因为它正确地使用了官方ssh-agent守护进程,该守护进程将您的密钥安全地保存在内存中。许多人手动启动ssh-agent并保持 1 个共享实例处于活动状态。 GNOME 的密钥环守护程序可以轻松地为您提供这一点,无需任何配置或麻烦。这很棒!它可以让您用密码保护磁盘上的所有密钥,以提高安全性,而无需任何麻烦。

相关内容