美文网首页软件开发与创新@IT·互联网
GitHub私有仓库拉取部署问题?这里有你需要的全部答案

GitHub私有仓库拉取部署问题?这里有你需要的全部答案

作者: liuwill | 来源:发表于2024-07-09 13:20 被阅读0次

在使用Github托管代码的时候,我们一般会把代码推送到私有仓库,如果要安全又方便的在服务器上持续集成部署代码,我们会使用部署密钥,只要在仓库或者个人账号中设置SSH密钥对的公钥,就可以通过ssh方式拉取代码。

最近发现Github不知道基于什么考虑,限制了每个SSH Key只能在一个账号配置,如果其他账号下的项目或者账号要设置SSH部署密钥,必须先从原来添加过的账号删除Key。

我觉得有可能是因为计算机和代码对世界的影响越来越大,安全变得越来越重要,所以无处不在的加密机制,从浏览器到代码库,策略越来越严格和复杂。感觉是不是在经济的自然增长,用电量增长过程中,也在贡献力量。

但是作为工程师,安全肯定是有价值的,我们肯定能找到方法解决问题。

绕过Github限制

Github有复杂的策略限制,但是根据我们使用SSH的经验,可以知道,在使用ssh连接服务器的时候,可以通过参数-i指定一个密钥对的私钥,访问特定服务器的特点账号,git本身也有这样的机制。

如果在Github添加Deploy Keys的时候,碰到报错“Error: Key already in use”,官方的建议是删掉另外一个账号的部署密钥,然后再添加,如果不知道是什么账号添加了,要先查看添加该密钥的账户。

$ ssh -T -ai ~/.ssh/id_rsa git@github.com
# Connect to GitHub.com using a specific ssh key
> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.

我们可以使用GIT_SSH_COMMAND环境变量,指定git程序运行的时候,使用的ssh命令,这样就可以像平时登录服务器一样,设置环境变量,可以用最简单的方式。

GIT_SSH_COMMAND='ssh -i ~/.ssh/deploy_key' git clone git@github.com:username/repo.git

如果需要让服务器特定账户拉取代码的时候,使用指定的私钥,还可以配置ssh配置文件(通常位于:~/.ssh/config),在文件中添加如下设置。

Host github-deploy
   HostName github.com
   User git
   IdentityFile ~/.ssh/deploy_key

如果采用这种配置方式,在拉取代码的时候,要将"git@"后面的github.com替换成github-deloy也就是config文件中的Host字段的值。

git clone git@github-deploy:username/repo.git

配置部署密钥

要配置Deploy Keys,首先再在服务器上生成密钥对,生成的时候可以指定一个文件名,如果不指定的话,默认生成的是/.ssh/id_rsa和/.ssh/id_rsa.pub。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/deploy_key -C "your_email@example.com"

然后复制生成的公钥文件~/.ssh/deploy_key.pub文件的内容。

进入Github仓库,依次点击Settings -> Deploy keys -> Add deploy key,然后粘贴公钥内容,并勾选Allow write access(如果需要写入权限)。

添加成功之后,就可以在服务器上尝试拉取代码。

同一台服务器管理多个部署密钥
如果你有多个GitHub账号,并且每个账号都有不同的私有仓库和相应的SSH Key,可能会遇到同一个SSH Key不能用于多个账号的问题。为了应对这个挑战,我们需要为每个账号生成不同的SSH密钥对,并在SSH配置文件中为不同账号配置不同的Host。首先为每个账号生成不同的密钥对,指定不同的文件名。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/test_key -C "your_email@example.com"
ssh-keygen -t rsa -b 4096 -f ~/.ssh/prod_key -C "your_email@example.com"

然后在ssh配置文件~/.ssh/config中添加不同账号的配置:

Host github-test
   HostName github.com
   User git
   IdentityFile ~/.ssh/test_key
   
Host github-prod
   HostName github.com
   User git
   IdentityFile ~/.ssh/prod_key

添加之后就可以使用git clone命令,分别拉取对应仓库的代码。

相关文章

网友评论

    本文标题:GitHub私有仓库拉取部署问题?这里有你需要的全部答案

    本文链接:https://www.haomeiwen.com/subject/zwxzcjtx.html