GitHub禁用弱加密后TeamCity连接Git遇Algorithm negotiation fail错误求助
解决TeamCity连接GitHub时的Algorithm negotiation fail错误
针对你遇到的这个问题,我之前帮几个朋友排查过类似情况——GitHub禁用弱加密后,旧的JSch库和Git凭证管理工具确实容易出现算法协商失败的问题。你已经做了不少尝试,我给你补充几个关键的排查和修复步骤:
1. 确保JSch jar文件被TeamCity全环境加载
你升级了jsch-0.1.54.jar,但要注意:
- 不仅要替换TeamCity服务器的
webapps/ROOT/WEB-INF/lib目录里的旧JSch文件,还要替换所有构建代理的lib目录下的对应文件 - 替换后必须重启TeamCity服务器和所有代理,否则新的jar不会生效
- 可以在TeamCity的日志里搜索
jsch,确认加载的版本是0.1.54
2. 给TeamCity添加JVM参数强制指定加密算法
即使升级了JSch,默认的算法列表可能还是没包含GitHub现在要求的现代算法。你需要在TeamCity的启动配置里添加以下JVM参数:
- 打开TeamCity的启动脚本(比如
bin/teamcity-server.bat或者服务配置) - 添加:
-Dssh.client.kex=curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 -Dssh.client.cipher=chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr - 重启TeamCity,让参数生效
3. 迁移到Git Credential Manager Core(替代旧的Windows版)
你之前用的是旧版的Microsoft Git Credential Manager for Windows,这个工具已经被官方废弃了,现在推荐使用Git Credential Manager Core(GCM Core):
- 卸载旧的Windows版GCM
- 安装最新的GCM Core
- 在TeamCity的VCS配置里,确保Git使用的是系统安装的Git(而不是TeamCity内置的),这样会自动调用新的GCM Core处理凭证
4. 配置SSH客户端支持GitHub的加密算法
在Windows用户目录下(C:\Users\<你的用户名>\.ssh\)创建或修改config文件,添加以下内容:
Host github.com KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
这个配置会强制SSH连接GitHub时使用符合要求的算法。
5. 验证TeamCity的Git配置
进入TeamCity的Administration > Version Control Settings > Git,检查:
- Git executable路径是否指向本地安装的最新版Git(建议2.30以上版本)
- 勾选"use system credential helper",让GCM Core处理凭证
- 测试连接,看是否还报错
按这个顺序排查下来,大部分情况下都能解决算法协商失败的问题。如果还是不行,可以查看TeamCity的VCS日志,找更详细的错误信息,比如具体是哪个算法协商失败了,再针对性调整。
内容的提问来源于stack exchange,提问作者rmsys
相关产品推荐
相关产品推荐

