Git 依据远程 URL 中的名称选择 SSH 规则
在 Git 远程 URL 中使用 SSH 主机别名,从而选中预期的 Host 块与 ProxyCommand。
当该别名负责代理路由时,请在 Git 远程中使用这个 SSH 别名:
Host code-via-proxy
HostName git.example.net
User git
ProxyCommand nc -X connect -x proxy.example.net:8080 %h %p
code-via-proxy 会与所提供的 SSH 名称进行匹配,随后由 HostName 确定真实服务器。该示例需要兼容 OpenBSD 的 netcat:-X connect 向 SSH 目标发起 HTTP CONNECT 请求。
对于新的 checkout:
git clone git@code-via-proxy:team/project.git
对于已有的 checkout:
git remote set-url origin git@code-via-proxy:team/project.git
请替换为真实的仓库路径。别名改变的是连接选择,而不是仓库在其服务器上的身份。对于位于允许公共中转的网络中的公开 Git SSH 服务器,HTTP 代理列表可提供代理主机和端口的候选项。只有在节点允许 CONNECT 到实际 SSH 目标和端口时,才使用这个不含代理账号的示例。
使用 [email protected]:team/project.git 的远程会改为匹配 git.example.net。它不会仅仅因为别名的 HostName 指向那里就选中别名。要么使用别名,要么把预期的规则放在真实名称之下。
也要检查更早的匹配块。对大多数 SSH 选项而言,最先获得的值生效,因此请把具体设置放在定义同一选项的宽泛默认值之前。