使用 Deploy key 将私有 GitHub 仓库克隆到境内服务器
由于某些原因,我们往往无法直接在境内服务器上克隆 GitHub 上的仓库。对于公开仓库,我们可以通过公益或自建的反向代理来解决这个问题。但是当我们希望将仓库保持私有时,我们遇到了以下几个问题:
- 我们不希望将自己的凭据上传到服务器,因此需要使用权限较低的 personal access token
- 很多反向代理方式,尤其是公益的,并不支持传递 personal access token
- 在服务器上使用 personal access token 配合反向代理进行 HTTPS clone 将会向反向代理服务器暴露该 token
本文将通过转发 GitHub 的 SSH 端口并使用 Deploy key 来解决这些问题。使用该方案,服务器上的凭据将仅限于读取指定仓库,且中间人无法获得你的凭据。
生成和设置 Deploy key
Deploy key 指位于部署目标服务器上的 SSH 密钥对,私钥保存在该服务器上,公钥保存在 GitHub 上,用于通过 SSH 连接到 GitHub。Deploy Key 只具有对特点仓库的权限,将其设为只读后很适合用于自动化部署。
首先你需要在服务器上生成 SSH 密钥对并导出公钥。
然后在需要部署的仓库的设置中添加 Deploy key:
转发 GitHub 的 SSH 端口
Deploy key 的工作需要服务器能够连接到 GitHub 的 SSH 端口,但对于国内服务器,连接往往并不稳定。我们可以在一台境外的服务器上对 github.com:22
进行端口转发。Nginx 配置如下:
1 |
|
当然,你也可以更换端口或者使用 iptables
等其他端口转发方式。
为了防止被其他人使用造成流量飙升,你可以在防火墙中将允许的源 IP 限制为你的境内服务器 IP。
然后通过以下命令克隆仓库:
1 |
|
请将 1.1.1.1
替换为你的境外服务器 IP 地址(或域名),username/private-repo
替换为你要 clone
的仓库。
Reference
使用 Deploy key 将私有 GitHub 仓库克隆到境内服务器
https://blog.caomingjun.com/clone-private-github-repo-to-china-server-with-deploy-key/