GitLab SSH连接超时排查(含Cloudflare与客户端证书环境)
GitLab SSH连接超时问题排查
问题背景
GitLab服务器WebUI通过Cloudflare和客户端证书做安全防护,使用SSH方式连接时出现超时。执行命令:
ssh -Tvvv git@gitlab.domain
调试日志
OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022 debug1: Reading configuration data /home/userdir/.ssh/config debug1: /home/userdir/.ssh/config line 1: Applying options for gitlab.domain debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/userdir/.ssh/known_hosts' debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/userdir/.ssh/known_hosts2' debug2: resolving "gitlab.domain" port 12345 debug3: resolve_host: lookup gitlab.domain:12345 debug3: ssh_connect_direct: entering debug1: Connecting to gitlab.domain [123.123.123.123] port 12345. debug3: set_sock_tos: set socket 3 IP_TOS 0x10 debug1: connect to address 123.123.123.123 port 12345: Connection timed out debug1: Connecting to gitlab.domain [123.123.123.123] port 12345. debug3: set_sock_tos: set socket 3 IP_TOS 0x10
SSH配置文件(~/.ssh/config)
Host gitlab.domain HostName gitlab.domain User gitlabuser Port 12345 PreferredAuthentications publickey IdentityFile ~/.ssh/git
(对应账户已存储该密钥)
可能的原因及排查方向
Cloudflare代理拦截SSH端口:Cloudflare默认仅代理Web相关端口(80/443等),如果
gitlab.domain的解析记录被Cloudflare代理(橙色云朵标识),且未配置对应12345端口的转发规则,SSH请求会被Cloudflare节点拒绝,导致超时。需确认SSH端口的DNS记录是否直接指向服务器真实IP,而非Cloudflare节点。防火墙/安全组端口未开放:
- 本地防火墙(如ufw、iptables)可能限制了12345端口的出站流量;
- 服务器端防火墙或云服务商安全组未开放12345端口的入站规则,导致请求无法到达SSH服务;
- 可通过
telnet gitlab.domain 12345或nc -zv gitlab.domain 12345测试端口连通性。
DNS解析指向错误IP:日志中解析到的
123.123.123.123可能是Cloudflare的CDN节点IP,而非GitLab服务器的真实IP。若SSH流量被导向CDN节点但未做端口转发,必然超时。需检查域名的A/AAAA记录,确保SSH使用的记录指向服务器真实IP。SSH服务配置异常:
- 确认服务器端
sshd是否监听12345端口:查看/etc/ssh/sshd_config中的Port配置; - 检查
sshd服务是否正常运行:执行systemctl status sshd; - 确认
sshd_config中是否允许git或gitlabuser登录:检查AllowUsers、DenyUsers等配置项。
- 确认服务器端
SSH配置文件与命令行参数冲突:配置文件中指定的User是
gitlabuser,但执行命令时用的是git@gitlab.domain,SSH会优先使用命令行的git用户。若服务器上无git用户或该用户未配置对应密钥,即使端口连通也会出现问题(当前日志是超时,但此配置不一致需修正)。网络链路故障:本地网络到服务器IP的12345端口存在路由阻塞、运营商限制等问题,可尝试更换网络(如手机热点)测试,或在服务器上抓包确认是否收到SSH请求。
内容的提问来源于stack exchange,提问作者user17658201
相关产品推荐
相关产品推荐

