很长一段时间以来,我一直想知道为什么当我在 MacOS 上使用 ssh 时,我需要使用ssh-add
向 ssh 代理添加密钥,而当我在 Fedora 上使用 ssh 时则不需要。代理似乎会自动加载我的 ~/.ssh/ 目录中的密钥。这个问题时不时就会出现,我通常会进行一些研究,直到发现新的东西,并满足我的好奇心。
前段时间我在本地设置了一个 Fedora 服务器,并注意到我ssh-add
也必须使用那里。当时我决定创建一个配置文件,在其中指定我连接的唯一主机(即 github)的身份文件。
一段时间后,我在机架空间上设置的远程服务器上看到了相同的行为。该服务器也使用 Fedora。然而,在该服务器上,我需要启动 ssh 代理,并在每次我想使用 ssh 连接到 github 时手动添加密钥。由于某种原因,我从未在那里设置配置文件,今天我又遇到了一个我只想弄清楚一切的时刻。
我认为今天是最长的研究会议之一。在我之前的研究中,我了解到 Gnome,或更准确地说 X,启动 ssh 代理,并向其添加密钥。当时这足以满足我的好奇心,但今天我真的很想弄清楚它是如何做到这一点的,以及为什么 MacOS 不这样做。
我花了一些时间阅读 Xsession 脚本以及它执行时包含的脚本,并且确认了我在某些来源上读到的内容:X 启动 ssh 代理并将 gnome 会话脚本传递给它。所以,基本上我确认了我之前学到的有关 X 启动 ssh 代理的知识。这就是我必须在rackspace服务器中手动启动代理的原因,因为它不运行X。我猜本地Fedora服务器在启动时自己设置来运行ssh代理,但我还没有研究过那。
但是,我不太清楚 Fedora ssh 代理如何获取现有的 ssh 密钥,而 MacOS 代理则不然。我假设两个操作系统都使用 OpenSSH 中的相同 ssh 代理,但目前我认为它们没有。
读这个问题按需将 SSH 密钥添加到 ssh-agent我看到那里的唯一答案提到代理可能会做一些奇特的事情来预先向代理添加密钥。它还特别提到桌面环境实现可能在某些钱包中拥有密钥。这让我觉得 gnome 有自己的代理实现。
此时,我想在括号中提及,在 MacOS 中,我已将本地 Fedora 服务器的密钥添加到钥匙串中,这会有效地将密钥加载到 ssh 代理中,并将其解锁。我前段时间这样做了,这让我觉得 Fedora 正在做类似的事情,它在某种钥匙串中包含钥匙,并且以这种方式加载它们,所以今天我开始研究 Fedora 中的某种类型的钥匙串。我最终了解了 gnome-keyring。另外,我上面链接的问题提到了 gnome-keyring-daemon,以及它如何启动 ssh-agent
回到今天的研究,我开始研究 gnome 源码。具体来说,是 gnome-keyring 项目。在该项目中有一个 ssh-agent,它似乎具有密钥的预加载功能(https://gitlab.gnome.org/GNOME/gnome-keyring/-/tree/master/daemon/ssh-agent)。这就是我的问题出现的地方:gnome 是否有自己的ssh-agent
实现,而这正是 Fedora 使用的?如果是这样的话,Fedora 系统中的 OpenSSH 实现会发生什么情况?
更新:昨天,在发布这个问题后,我了解到我的 Fedora 系统(桌面,而不是服务器)实际上正在使用 Wayland。我在设置的“关于”部分看到窗口系统之前设置为 Wayland,但我不清楚这是否意味着 X 未被使用。这对许多人来说可能是显而易见的,但我不是这方面的专家。 Wayland 似乎也没有像 X 那样启动 ssh-agent,而是在实际第一次需要时按需启动(如何在 Gnome 下设置默认 ssh-agent 超时)。
评论中还指出,我的问题可能有点毫无意义,但我想从真正了解并理解 fedora 和 ssh-agent 内部工作原理的人那里得到证实,因为我不是专家,我不想仅仅接受我可能错误/不完整的发现。
答案1
我在中找到了我正在寻找的确认Gnome 密钥环 SSH 代理 wiki 页面。其中特别指出,ssh-agent
包含的文件gnome-keyring
会自动加载~/.ssh
具有相应.pub
文件的目录中的文件。
如果您想了解有关密钥环的更多信息,这是一个很好的资源这个IT下一篇文章。