ssh 配置中忽略了 IdentityFile

Upv*_*ote 5 linux git ssh

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

Host *
  IdentityFile /root/.ssh/id_rsa_api
  IdentityFile /root/.ssh/id_rsa_ui
Run Code Online (Sandbox Code Playgroud)

我使用这些密钥来克隆 GitHub 存储库。但是,只有第一个IdentityFile(API)有效。对于第二个,Repository not found当我开始克隆时它说。当我交换配置时,例如:

Host *
  IdentityFile /root/.ssh/id_rsa_ui
  IdentityFile /root/.ssh/id_rsa_api
Run Code Online (Sandbox Code Playgroud)

这样我就可以克隆 UI,但不能克隆 API。结果,我看到密钥是正确的,但第二个 IdentityFile 始终被忽略。问题可能是什么?

我无法使用ssh-add,因为我ssh在 Dockerfile 内进行配置,并且在构建容器时 ssh-agent 未运行。

Ken*_*ter 5

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

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

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


Upv*_*ote 2

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

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

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