我有一个几乎每天都使用的 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 的密钥环守护程序可以轻松地为您提供这一点,无需任何配置或麻烦。这很棒!它可以让您用密码保护磁盘上的所有密钥,以提高安全性,而无需任何麻烦。