Git远程仓库用DNS链接替换IP后连接超时,请求排查配置问题
问题描述
我要在电脑A上搭建Git服务器,实现同网络的电脑B与异网络的电脑C均可推送、拉取代码。已完成以下配置:
- 将路由器端口22转发至电脑A
- 配置了DuckDNS域名
gitserver.duckdns.org - 电脑B的SSH公钥已添加至电脑A的
authorized_keys文件中
尝试通过SSH协议添加远程仓库:
git remote add origin git@gitserver.duckdns.org:/srv/git/project.git
执行推送操作时出现错误:
ssh: connect to host gitserver.duckdns.org port 22: Connection timed out fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
改用HTTP协议配置远程仓库:
git remote add origin http://gitserver.duckdns.org:/srv/git/project.git
同样连接失败:
fatal: unable to access 'http://gitserver.duckdns.org:/srv/git/project.git/': Failed to connect to gitserver.duckdns.org port 80 after 129444 ms: Couldn't connect to server
不知下一步该如何操作,请求协助排查问题。
排查与解决步骤
1. 验证域名解析正确性
在电脑B和电脑C上分别执行以下命令,确认域名指向的是你的公网IP:
nslookup gitserver.duckdns.org # 或者用ping测试(部分环境可能禁ping,优先用nslookup) ping gitserver.duckdns.org
- 如果返回的IP不是你的公网IP:检查DuckDNS的自动更新脚本是否正常运行,手动触发域名更新后再测试。
2. 排查端口转发与防火墙问题
(1)先测试内网连通性(排除服务器本身问题)
在同网络的电脑B上,直接用电脑A的内网IP连接SSH:
ssh git@[电脑A的内网IP]
- 如果能成功连接:说明电脑A的SSH服务正常,问题出在公网端口转发或域名解析环节。
- 如果连接失败:先修复电脑A的SSH服务:
- 检查SSH服务是否启动:
systemctl status sshd(Linux),Windows需确认OpenSSH服务处于运行状态。 - 确认仓库路径
/srv/git/project.git存在,且git用户拥有读写权限:ls -ld /srv/git/project.git,权限至少为drwxr-xr-x,属主属组应为git用户。
- 检查SSH服务是否启动:
(2)测试公网端口是否可访问
在异网络的电脑C上,执行以下命令测试端口连通性:
# 测试SSH端口22 telnet gitserver.duckdns.org 22 # 或者用curl测试HTTP端口80 curl -v http://gitserver.duckdns.org
- 如果连接超时:
- 检查路由器端口转发规则:确认公网端口22(或80)已映射到电脑A的静态内网IP和对应端口(22对应SSH,80对应HTTP)。若电脑A是动态IP,需设置DHCP固定IP或改用动态DNS绑定。
- 检查电脑A的防火墙:确保允许22(SSH)和80(HTTP)端口的入站连接。Linux可执行
ufw allow 22、ufw allow 80;Windows需在防火墙高级设置中添加对应端口的入站规则。
3. 修正HTTP协议配置错误
你使用的HTTP远程仓库地址存在格式错误:http://gitserver.duckdns.org:/srv/git/project.git多了一个冒号。此外,HTTP协议访问Git仓库需要依赖Web服务(如Apache、Nginx),需先完成以下配置:
- 在电脑A上安装并配置Web服务,将
/srv/git目录映射到Web根目录的子路径(比如/git)。 - 正确的HTTP远程地址格式应为:
http://gitserver.duckdns.org/git/project.git
如果暂时不想配置Web服务,优先解决SSH协议的连通问题更简单。
4. 规避运营商端口屏蔽
部分运营商会屏蔽22、80这类常用端口,可尝试修改路由器端口转发规则,将公网端口改为非标准端口(比如2222),然后使用以下命令添加远程仓库:
git remote add origin ssh://git@gitserver.duckdns.org:2222/srv/git/project.git
再测试推送/拉取操作。
内容的提问来源于stack exchange,提问作者Jake A
相关产品推荐
相关产品推荐

