IdentityFile 在 ssh 配置中被忽略

IdentityFile ignored in ssh configuration

我的ssh里面的配置/root/.ssh/config:

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

我使用这些密钥能够克隆 GitHub 存储库。但是,只有第一个 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 不是 运行。

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

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

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

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

Deploy keys only grant access to a single repository. More complex projects may have many repositories to pull to the same server

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