SSH配置疑问:指定GitHub用特定密钥却优先调用YubiKey?
SSH配置问题解答
问题结论
这不是预期行为,核心原因是对OpenSSH的IdentityFile配置叠加逻辑理解有误。
原因分析
OpenSSH的配置指令是累加生效的:
- 全局配置中的
IdentityFile会被所有Host块继承,Host块中的IdentityFile是追加到全局列表后,而非替换全局配置。 - 你配置的
IdentitiesOnly yes仅限制ssh只使用配置文件中指定的身份列表,而非SSH Agent中的所有密钥,但由于全局的YubiKey密钥仍在身份列表内,ssh会按列表顺序优先尝试这些密钥。
从你提供的debug日志也能验证这一点:
debug1: Will attempt key: /home/user/.ssh/yubikey-01-res ED25519-SK SHA256:he6uVl0OF/kFNLgxJxBWp1LqFKqUeqGE7QBvXrMV32Y explicit authenticator agent debug1: Will attempt key: /home/user/.ssh/yubikey-05-res ED25519-SK SHA256:Ris+zCkAuyo5TNMtSPPw95i50+qfrDpnctJX1VdXb04 explicit authenticator agent debug1: Will attempt key: /home/user/.ssh/id_ed25519 ED25519 SHA256:4dewvZr3d9r9hEfDz1JyCpe4SedcFT32Purq88AyMhI explicit agent
ssh按全局配置的顺序尝试密钥,即使在github.com的Host块中指定了id_ed25519,也只是追加到列表末尾,不会改变原有顺序。
解决方案
要让github.com仅使用id_ed25519密钥,需先在Host块中重置身份列表,再添加目标密钥。修改后的配置如下:
AddKeysToAgent yes ForwardAgent yes AddressFamily inet IdentityFile ~/.ssh/yubikey-01-res IdentityFile ~/.ssh/yubikey-05-res IdentityFile ~/.ssh/id_ed25519 Host github.com IdentityFile none # 清空之前的身份列表 IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes
修改后,ssh连接github.com时会仅尝试id_ed25519密钥,不再优先使用YubiKey的密钥。
内容的提问来源于stack exchange,提问作者Subbeh
相关产品推荐
相关产品推荐

