仅使用来自 ssh-agent 的私钥,避免“过多的身份验证失败”

仅使用来自 ssh-agent 的私钥,避免“过多的身份验证失败”

我将所有私钥加密存储在 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

相关内容