[踩坑] 一次 SSH + Git + SourceTree 代理
—— 从 HTTP Basic denied 到 corkscrew not found
场景背景:
- 内部 Git(GitLab / 私有 Git)
- 需要 SSH + 代理 IP 才能访问
- 客户端使用 SourceTree(macOS)
- 遇到一系列看似不相关、实际强关联的问题
一、问题现象汇总
在一次看似“很普通”的 Git fetch 中,连续遇到多个问题:
1️⃣ HTTP 拉取失败
HTTP Basic: Access denied. |
2️⃣ 切换 SSH 后,测试连接失败
ssh -T git@git.topu-internal.dev |
报错:
zsh:1: command not found: corkscrew |
3️⃣ SourceTree 无法正常 fetch / pull
即使已经:
- 配置了 SSH Key
- Remote URL 改成了
git@xxx
二、问题本质拆解(非常关键)
❗ 本质 1:HTTP 密码认证被禁用
这是 Git 平台的安全策略升级,不是客户端问题:
- ❌ 用户名 + 密码
- ❌ HTTP Basic Auth
- ✅ Access Token
- ✅ SSH Key(推荐)
👉 解决方向:必须切 SSH 或 Token
❗ 本质 2:SSH 实际走了代理,但代理命令不存在
错误信息里最关键的一句是:
command not found: corkscrew |
说明:
- SSH 配置中 使用了
ProxyCommand corkscrew ... - 但系统中 根本没安装 corkscrew
- SSH 无法建立 TCP 通道
- 最终报出一个“看起来很玄学”的端口错误:
Connection closed by UNKNOWN port 65535 |
⚠️ 这个 65535 不是目标端口,而是 ProxyCommand 失败后的兜底行为。
三、为什么会出现 corkscrew?
这是一个历史遗留问题:
早期 SSH 走 HTTP 代理的标准工具:
corkscrew很多旧教程 / 旧配置默认用它
但在现代系统中:
- ❌ 默认不安装
- ❌ 维护基本停止
- ❌ 只支持 HTTP CONNECT
四、正确且现代的解决方案(推荐)
✅ 使用 nc(netcat)作为 ProxyCommand
这是 OpenSSH 官方推荐方式,兼容性最好。
五、最终正确配置(核心)
~/.ssh/config
Host git.topu-internal.dev |
说明:
| 参数 | 含义 |
|---|---|
-X 5 | SOCKS5 代理 |
-x | 代理地址 |
%h %p | 目标主机和端口 |
如果是 HTTP 代理:
ProxyCommand nc -X connect -x 127.0.0.1:8080 %h %p |
六、验证方式(非常重要)
1️⃣ 终端验证(最权威)
ssh -T git@git.topu-internal.dev |
成功应看到:
Welcome to GitLab, @username! |
2️⃣ 查看 SSH 实际使用的代理命令
ssh -G git.topu-internal.dev | grep -i proxy |
输出示例:
proxycommand nc -X 5 -x 127.0.0.1:1080 %h %p |
👉 说明配置已生效
七、SourceTree 是否支持 SSH + 代理?
完全支持,而且是原生支持。
前提条件只有 3 个:
- Remote URL 是 SSH:
git@git.topu-internal.dev:group/repo.git |
- SourceTree 使用 OpenSSH
SourceTree → 设置 → Git → SSH 客户端:OpenSSH |
- 终端
ssh -T能通
只要终端能通,SourceTree 一定能通
SourceTree 本质只是调用 Git + OpenSSH
八、为什么之前会误以为是 SourceTree 的问题?
因为这类问题的错误传播路径很迷惑:
代理命令不存在 |
👉 真正的根因藏在 SSH 的 ProxyCommand 里
九、排错 Checklist(以后直接对)
# 1. 是否还在用 https |
十、经验总结
❗ Git / SourceTree 出问题,先看 SSH,不要先怀疑 Git
❗ 代理相关问题,80% 是 ProxyCommand
❗ nc > corkscrew(现代环境)
附:如果一定要用 corkscrew(不推荐)
brew install corkscrew |
但强烈建议直接迁移到 nc。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Leon!
评论



