tl;dr:我在 ssh-agent 中拥有身份。除了一个身份之外,其他所有身份都会被使用;当我使用它时,一个身份会被添加到代理和钥匙串中,但随后系统会一次又一次地提示我输入密码,就好像密钥不在代理中一样(如果不在,就好像代理无法从钥匙串中获取密码一样)。
细节:
我有一堆 SSH(RSA,协议 2)密钥,我使用代理并将密码存储在钥匙串中。
对于其中一个密钥(且只有一个密钥),直到最近,SSH 才开始忽略代理中的身份。即:
- 我使用键 ( 进行连接
ssh -i keyfile user@host
,IdentitiesOnly
对于 而言为真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