我将所有私钥加密存储在 encfs 文件中。我将 encfs 文件挂载(解密)到文件夹中,将所有私钥添加到 ssh-agent 并添加终身标志,然后卸载文件夹。在这种情况下,我的私钥文件保持加密状态,我可以通过 ssh-agent 访问它们。
我的密钥列表变得越来越长,我开始收到“%username%的身份验证失败次数过多”的提示。我寻找解决方法,常见的建议是在〜/ .ssh / config中指定每个IdentityFile
Host hostalias
Hostname my.host.name
User username
IdentityFile ~/.ssh/unencrypted_key
但在这种情况下,我的密钥应该始终以未加密状态存储,因为 ssh 将直接访问它们(忽略 ssh-agent)。
是否有任何可能的解决方案来指定应该为哪个主机使用哪个私有 ssh 密钥(来自 ssh-agent)?
PS 每个密钥都有自己的指纹,我认为这可以通过在配置中指定它来解决(如下所示):
Host hostalias
Hostname my.host.name
User username
IdentityFingerPrint 0c:d6:e6:64:0f:b5:1f:29:11:51:12:74:90:55:49:ae
但我没有发现任何类似的东西。
答案1
首先,请注意,SSH 私钥文件本身可以使用密码加密,无需任何额外的工具(如 encfs)。使用ssh-keygen -f <file> -p
将设置密码。(最近的 OpenSSH 版本为此使用 AES-128-CBC。)
但当你同时拥有IdentityFile
和代理运行时,ssh 只会将文件用作选择应使用哪个密钥的提示。为此,它只需要检查密钥的公钥部分。因此,只要将公钥提取到相应的文件中,就无需保持密钥解密,.pub
这是默认操作,但可以使用 重复执行ssh-keygen -f <file> -y
。