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

在使用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命令,分别拉取对应仓库的代码。

如果您喜欢这篇文章,欢迎关注我的公众号【软件十书】,获取更多精彩内容,点击阅读原文

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值