有没有办法告诉 SSH 从代理中选择哪个密钥,而无需参考公钥/私钥文件?

有没有办法告诉 SSH 从代理中选择哪个密钥,而无需参考公钥/私钥文件?

语境

我有多个 SSH 密钥对。目前,我通过保存密钥集合~/.ssh(当然受密码保护)来处理这个问题,并在其中~/.ssh/config设置了每个密钥的Host权限部分IdentityFile,并AddKeysToAgent在解锁密钥后将它们缓存一段时间。

我将我的~/.ssh/config文件与其余的点文件(在 git 存储库中)同步到多台机器上,但我想避免私钥“移动”,所以现在我只是在每台机器上分别生成密钥对,但将它们存储在相同的路径中,这样同步IdentifyFile配置仍然会选择它们。然后,只需在需要登录的主机上分别授权我所有机器上的密钥即可。

问题

我正在考虑通过将 SSH 密钥存储在密码管理器中来简化此设置,该密码管理器具有自动将其添加到正在运行的功能ssh-agent。然后密钥将存在于我的密码数据库中,我已经有一个同步解决方案(显然与我的 gitted 点文件分开!),并且我不需要在每台机器上生成密钥对(尽管缺点是不再能够撤销单个机器的密钥)。

但是,这样一来,配置中就没有密钥文件可供参考,IdentifyFile无法指定每个主机要使用哪个密钥。有没有解决方案可以避免这种情况?我希望有一种方法可以根据comment或类似的东西来识别密钥。

非解决方案

我知道我可以使用民众SSH中的密钥文件IdentityFile可以从代理中选择密钥,即使私人的密钥不存在于文件中。理论上,我可以将它们放在我的 dotfiles 存储库中,但我不喜欢通过单独的机制同步我的密钥的公钥和私钥(它们最终可能会不同步,在某些情况下完全无法使用,并且我拥有的有效密钥的更改是不同的,并且在概念上与我的更改不同步配置;例如,如果我回滚到点文件配置的旧版本,我仍然需要当前的 ssh 密钥,而不是提交该点文件时使用的密钥)。因此,如果这是唯一的解决方案,我可能根本不会费心切换我的流程。

我也不能指望让 SSH 尝试代理中的所有密钥;我不认为我有那么多密钥,以至于我会经常遇到“身份验证尝试失败次数过多”的问题,但我确实需要访问多个单独的 GitHub 帐户,而 SSH 对 GitHub 的访问会根据您使用的密钥来识别您的帐户。因此,当它可以尝试所有密钥时,它通常会找到一个身份验证(因此 git/SSH 将停止尝试更多密钥),但尝试了错误的帐户(因此我的尝试操作失败)。

结论

IdentityFile有没有其他方法可以让 SSH 选择正确的密钥,或者我必须有一个使用/指向的文件-i

相关内容