通过 SSH 访问 GitHub
文章目录
需求
公司有自建的 GitHub 企业版,必须通过 VPN 或者 SSH 跳板机才能访问网页,如何在客户端通过命令行存取远端代码库呢?
示例
GitHub 企业版地址:github.abc.com
跳板机:jump_host
跳板机用户名:jump
解决方案
公司的 GitHub 启用了大文件存储模式 Git-LFS
, checkout 代码库的时候,客户端需要先通过 SSH 取回库的内容(包括大文件的占位符),再通过 HTTPS 取回对应占位符的大文件。因此在配置跳板机时,需要同时考虑 SSH 和 HTTPS 两种协议的代理转发。
SSH 转发
SSH 转发配置非常直接,通过跳板机转发所有发送到目标地址的 SSH 流量。
编辑 ~/.ssh/config
|
|
这里的 ProxyCommand
会利用 ssh -W
来连接跳板机然后转发请求。-W
参数在较新的 OpenSSH 中获得支持,至少需要 5.4
link。在较老的版本中,则可以使用 nc (netcat)
代替。
|
|
在配置文件中不能存储 SSH 账号的密码,如果已经配置了服务器和跳板机的公钥访问,则可以直接免密码连接,否则会在连接过程中要求输入密码。
HTTP/HTTPS 转发
建立了 SSH 隧道,我们还需要一个 HTTP/HTTPS 代理才能访问 GitHub LFS。通常情况下,我们不能在跳板机新安装一个代理软件,这里我们就在客户端本地安装一个基于 SSH 的 HTTP/HTTPS 代理 mallory
link。这个代理对于跳板机的唯一要求就是 SSH 可用,不用任何其他配置。
这是一个使用 GoLang 编写的开源代理软件,直接用下面的命令即可安装完成,装好的程序位于 ~/go/bin/mallory
|
|
编辑 ~/.config/mallory.json
|
|
代理会启动两个端口,local_normal
会转发所有 HTTP/HTTPS 请求到跳板机,local_smart
只会转发目标地址为 blocked 中配置域名的请求到跳板机。
启动代理软件
|
|
编辑 ~/.gitconfig
|
|
现在所有的 Git 操作(SSH,HTTP/HTTPS)都会通过跳板机访问到 GitHub 服务器。
文章作者 Palfans
上次更新 2022-04-30