公司封禁22端口后SSH over HTTPS连GitHub报Connection Reset如何解决
问题前置说明
Connection Reset 属于TCP连接层面的报错,发生在SSH身份校验阶段之前,因此修改known_hosts文件对该问题完全无效,该文件仅用于解决服务端公钥校验不匹配类的报错。
可能的故障诱因
- 企业出口防火墙的深度包检测规则拦截:绝大多数企业防火墙会对443端口流量做协议识别,非标准HTTPS的SSH流量会被识别后主动切断连接,是这类场景下最常见的诱因。
- SSH配置/密钥权限异常:运行Jenkins的用户对应的
~/.ssh/config、SSH私钥文件权限高于600,或者文件所属用户不匹配时,SSH客户端会主动终止连接,抛出同类报错。 - OpenSSH客户端版本兼容性问题:老旧版本的OpenSSH客户端与ssh.github.com支持的加密算法不兼容,握手失败后会被服务端重置连接。
- DNS解析异常:本地DNS解析ssh.github.com时返回了被污染的IP,导致连接请求被拦截重置。
可行解决方案
首先先执行排查命令定位问题:切换到Jenkins运行用户下执行 ssh -vT git@github.com,根据debug日志判断故障阶段:如果是TCP握手阶段直接重置,优先排查网络/防火墙问题;如果是SSH握手阶段才重置,优先排查客户端版本、权限问题。
对应解决方案如下:
- 方案1:切换为HTTPS+PAT认证方式
无需调整SSH配置,直接将Jenkins中关联的GitHub仓库地址从SSH格式改为HTTPS格式,在GitHub账号中创建拥有仓库读写权限的Personal Access Token(PAT),将PAT作为密码存入Jenkins的凭证管理器即可。该方案完全走标准HTTPS 443端口流量,不会被防火墙规则拦截。 - 方案2:配置SSH走企业代理
若企业要求外网访问必须走代理,在SSH配置中追加代理规则即可,配置示例:Host github.com Hostname ssh.github.com Port 443 User git ProxyCommand nc -X connect -x 企业代理IP:代理端口 %h %p - 方案3:修复SSH文件权限
执行以下命令修正权限配置,注意替换为实际的Jenkins运行用户名:chown -R jenkins用户:jenkins用户组 /home/jenkins用户目录/.ssh chmod 700 /home/jenkins用户目录/.ssh chmod 600 /home/jenkins用户目录/.ssh/* - 方案4:升级OpenSSH或调整加密算法
升级OpenSSH客户端到8.0及以上版本,若无法升级可在SSH配置中追加兼容加密算法规则:Host github.com Hostname ssh.github.com Port 443 User git PubkeyAcceptedKeyTypes +ssh-rsa HostKeyAlgorithms +ssh-rsa
内容的提问来源于stack exchange,提问作者oRoberto
相关产品推荐
相关产品推荐

