在ssh config中忽略了IdentityFile

时间:2015-02-02 17:18:27

标签: linux git ssh

我在/root/.ssh/config内的ssh配置:

Host *
  IdentityFile /root/.ssh/id_rsa_api
  IdentityFile /root/.ssh/id_rsa_ui

我使用此键可以克隆github repos。但是只有第一个IdentityFile(api)有效。当我开始克隆时,它会说Repository not found。当我交换配置时:

Host *
  IdentityFile /root/.ssh/id_rsa_ui
  IdentityFile /root/.ssh/id_rsa_api

这样我可以克隆UI而不是API。因此,我发现密钥是正确的,但第二个IdentityFile总是被忽略。任何想法是什么问题?

我无法使用ssh-add,因为我在Dockerfile中配置了ssh,并且在构建容器时ssh-agent没有运行。

2 个答案:

答案 0 :(得分:3)

除问题中列出的两个键外,您还有其他任何键吗?在经过多次失败的身份验证尝试后,OpenSSH服务器sshd将丢弃客户端。如果您有足够的密钥,您的客户可能会尝试所有这些密钥,并在它通过您列出的所有密钥之前被丢弃。使用ssh参数运行-v将显示ssh尝试使用哪些密钥进行身份验证。

sshd_config参数MaxAuthTries确定客户端可以尝试进行身份验证的次数。默认值为6.

如果出现此问题,您可以通过设置ssh_config参数IdentitiesOnly来避免此问题。这可以防止您的客户端使用不是来自ssh配置文件的身份。另一件需要考虑的事情是使用更具体的HostMatch指令,因此您只需将密钥应用于应使用密钥的特定主机。

答案 1 :(得分:1)

https://developer.github.com/guides/managing-deploy-keys/#deploy-keys

  

部署密钥仅授予对单个存储库的访问权限。更复杂   项目可能有许多存储库可以拉到同一台服务器

所以我使用部署密钥删除了。相反,我创建了一个ssh密钥,允许访问我的所有私有存储库。这样我就有一个IdentityFile。