如何通过SSH将本地git仓库克隆到另一台远程机器?
你遇到的Connection reset by peer错误通常由以下几个常见配置问题导致:
- 本地设备未启动SSH服务,反向隧道转发的22端口无对应服务响应
- 远程办公机器的
sshd配置禁用了端口转发绑定权限,默认只允许回环地址访问转发端口 - 执行
git clone时填写的用户名是远程机器的用户名,而非本地设备的SSH登录用户名
反向SSH隧道同步代码的正确实现步骤
1. 前置配置调整
首先完成两端的基础配置:
- 本地设备启动SSH服务:
- Debian/Ubuntu系执行:
sudo systemctl enable --now sshd - macOS在「系统设置-通用-共享」中开启「远程登录」
- Windows在「设置-应用-可选功能」中安装OpenSSH服务器后启动服务
- Debian/Ubuntu系执行:
- 远程办公机器修改SSH配置允许端口转发:
编辑/etc/ssh/sshd_config,修改或新增配置:
保存后执行GatewayPorts clientspecifiedsudo systemctl restart sshd生效,该配置比全局开GatewayPorts yes更安全。
2. 建立反向SSH隧道
本地设备执行如下命令建立隧道,命令执行后保持终端窗口不关闭:
ssh -R 0.0.0.0:43022:localhost:22 <远程机器用户名>@<远程机器公网IP/域名>
3. 远程机器拉取代码
首先测试端口连通性,远程机器执行:telnet localhost 43022,如果能正常连通再执行git克隆命令:
git clone ssh://<本地设备的SSH用户名>@localhost:43022/<本地git仓库的绝对路径>
比如本地仓库在/home/zhangsan/testgit,本地SSH用户是zhangsan,命令就是:git clone ssh://zhangsan@localhost:43022/home/zhangsan/testgit
更易用的长期同步方案
如果需要频繁同步代码,不需要每次手动建立反向隧道,可以直接用git远程推送的方式实现:
- 远程办公机器创建裸仓库:
mkdir -p ~/repo/testgit.git && cd ~/repo/testgit.git git init --bare
- 本地仓库添加远程推送地址:
git remote add office <远程机器用户名>@<远程机器公网IP/域名>:~/repo/testgit.git
- 本地开发完成后直接推送到办公机器:
git push office main
需要在办公机器使用代码时,直接从本地裸仓库克隆或拉取即可:git clone ~/repo/testgit.git
内容的提问来源于stack exchange,提问作者MyUserIsThis
相关产品推荐
相关产品推荐

