隧道SSH执行git ls-remote报SHA-1不支持错误,但ssh -T正常
解决方案与排查步骤
1. 检查SSH代理中的密钥列表
执行以下命令查看当前SSH代理中加载的所有密钥:
ssh-add -l
如果列表中存在SHA-1签名的RSA密钥(格式类似2048 SHA1:xxxxx ...),立即从代理中移除:
ssh-add -d ~/.ssh/旧密钥文件名
即使你已经注释了全局配置中的旧密钥,SSH代理可能仍缓存着之前加载的密钥,导致Git操作时优先使用它。
2. 为GitHub配置独立的SSH规则
在~/.ssh/config中添加针对GitHub的专属配置,强制使用兼容的密钥和算法,避免全局配置的干扰:
Host github.com HostName github.com User git # 指定你确认有效的密钥(比如ED25519或ECDSA) IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # 仅启用GitHub支持的现代算法 PubkeyAcceptedAlgorithms ssh-ed25519,ecdsa-sha2-nistp256 HostKeyAlgorithms ssh-ed25519,ecdsa-sha2-nistp256
配置完成后,重新执行Git命令测试。
3. 查看Git SSH调用的详细日志
通过启用SSH调试模式,追踪Git实际使用的密钥和算法:
GIT_SSH_COMMAND="ssh -v" git ls-remote --heads git@github.com:company_org/repository.git
在输出日志中查找debug1: Offering public key:的行,确认Git尝试的密钥类型;同时关注服务器返回的错误细节,定位是否存在算法不兼容或密钥误用的问题。
4. 检查隧道SSH配置的冲突
确认你的隧道主机(tunnelhost)的SSH配置中,没有覆盖ForwardAgent或强制使用旧算法的规则。可以临时修改隧道配置,添加IdentitiesOnly yes,避免隧道端加载额外密钥:
Host tunnelhost HostName tunnelhost.example.com User your-username ForwardAgent yes ProxyCommand ssh tunnelhost exec nc %h 22 IdentitiesOnly yes
内容的提问来源于stack exchange,提问作者Stoic Alchemist
相关产品推荐
相关产品推荐

