Mac 上的 ssh-agent 和/或 Mac 钥匙串存在问题

Mac 上的 ssh-agent 和/或 Mac 钥匙串存在问题

tl;dr:我在 ssh-agent 中拥有身份。除了一个身份之外,其他所有身份都会被使用;当我使用它时,一个身份会被添加到代理和钥匙串中,但随后系统会一次又一次地提示我输入密码,就好像密钥不在代理中一样(如果不在,就好像代理无法从钥匙串中获取密码一样)。

细节:

我有一堆 SSH(RSA,协议 2)密钥,我使用代理并将密码存储在钥匙串中。

对于其中一个密钥(且只有一个密钥),直到最近,SSH 才开始忽略代理中的身份。即:

  • 我使用键 ( 进行连接ssh -i keyfile user@hostIdentitiesOnly对于 而言为真Host *
  • OS X 要求输入密码;我设置了保存在钥匙串复选框。
  • 身份隐式添加到代理中,添加钥匙串条目
  • 我关闭连接
  • 我重新连接
  • 我再次被要求输入密码,就好像代理和/或钥匙串条目不存在一样

我已经验证: - 对于 ssh、ssh-add 和 ssh-agent,钥匙串条目设置为“始终允许”。 - 密钥文件设置了正确的权限。 - 身份已加载到代理中。 - 只要我每次都输入密码,登录就可以使用该 ID。

我已尝试过:

  • 删除整个钥匙串条目,然后再次启动 ssh。系统提示我输入密码,输入后,钥匙串中的条目和代理中的身份就被添加了;连接成功,下次再次被询问。
  • 重命名密钥文件本身。新的钥匙串条目已创建,连接正常,但在下次连接时,系统再次要求我输入密码。
  • 我已经运行了,ssh-add -D然后是ssh-add -k。我已验证有问题的密钥在添加的身份中;因此,原则上,代理和钥匙串之间的通信似乎有效。仍然再次询问。

我的其他密钥都不会发生这种情况,密钥本身适用于 SSH。它还真的因为我使用了相当强的密钥密码,所以这很烦人。

答案1

一旦代理中存在身份,您就不应该使用“-i keyfile”参数。

尝试这个:

ssh-add keyfile
ssh -v user@host

(v 将帮助你调试)

答案2

原来问题出在我的代理中 ID 太多。通常情况下,-i一旦代理中有身份,ssh 就会忽略该选项,并依次使用代理中的身份。如果代理中有超过 5 个身份,服务器将拒绝所有身份,然后恢复使用密码,因为尝试失败的次数太多。

identitiesonly在设置中host *,使 ssh 按-i选项运行(或identityfile再次运行.ssh/config,但如果指定的身份已被解锁,仍会在代理中查找,这样从任何角度都解决了这个问题。

答案3

关注 Dave Dribin 的博客 (Mac OS X 10.5(Leopard)上的 ssh-agent

您应该运行以下命令:

ssh-add -k /path/to/your/private/key

之后您可以通过以下方式检查您的配置:

sh-add -L

相关内容