每周一坑-gitlab报错添加重复ssh公钥
![](https://img2022.cnblogs.com/blog/520218/202208/520218-20220816211810502-807523366.jpg)
![](https://img2022.cnblogs.com/blog/520218/202208/520218-20220816214525582-1660247804.png)
千万千万不要按它提示的去做!!!
这次我特意梳理了整个配置流程,请看图:
内网服务器a、b实际上分别是两个项目1、2的发布后台(事实上是有3台机器,对应3个项目后台,我就不都画上去了),昨天规划好用一台机器,也就是服务器c去做备机,为了节省虚拟机数量,这个备机打算同时运行a、b两个项目1、2的后台。
一、图的说明:
1、线路:内网服务器a ——》 项目1 ——》 外网服务器a-a
为了安全起见(在我入职前发生过后台放线上导致被黑客攻陷的事故),我们伟大的领导做了个非常明智的决策,把发布后台放公司内网,然后通过gitlab同步到线上。其中线上拉取代码这条线路,一开始不是单向传输的,优化是我想的,哪天逆向从线上推送回代码到gitlab,岂不是跟原来的内网到gitlab这条线路混了么,处理git的问题可是非常棘手的~~~
于是我就利用gitlab角色权限的特性,把内网后台服务器 a 的ssh公钥加到gitlab用户:user1后,授予维护者maintainer角色(push+pull权限);而线上外网服务器a-a,ssh公钥加到gitlab用户:user1-1,授予汇报者reporter角色(仅pull权限):
上述流程图算是我把具体问题抽象化了。
这个绿色图标的人:,就是我流程图的user1,在内网服务器a有gitlab拉取和推送代码的权限,需要把内网服务器a的ssh公钥添加到user1这个用户下;线上外网服务器a-a,添加ssh公钥给
,也就是 user1-1,仅有拉取代码权限;
2、线路:内网服务器b ——》 项目2 ——》 外网服务器b-b
![](https://img2022.cnblogs.com/blog/520218/202208/520218-20220816220258151-931122409.png)
![](https://img2022.cnblogs.com/blog/520218/202208/520218-20220816220553960-713089047.png)
3、线路:项目1、 2——》内网服务器c进行拉取
当时我给这台备用后台服务器c的定位:只具有项目1、2的拉取代码权限,以防跟现在使用的线路1、2产生冲突。因为我仅仅是保证这台备用服务器每天能跟主服务器a、b数据同步,以防万一哪天主服务器a、b挂了导致我被人索命,并不是为了反客为主,一切正常的时候,还抢了主服务器的功能去提供服务的。
这时,我就出现惯性思维了,弄完项目1之后,把c服务器的ssh公钥放到user1-1后,同步成功搞完;
当处理项目2时,想把c服务器的ssh公钥放到user2-2 ,就报错了
处理这个问题也比较简单,因为在做项目1的同步时,已经把c服务器的ssh公钥放到 user1-1这个蓝色图标的人里,对于项目2,我把这个user1-1 加到reporter成员就行了,也没影响到单向传输的实现目的。
二、总结
特意找了下gitlab官方文档:https://docs.gitlab.com/ee/user/ssh.html#use-ssh-keys-to-communicate-with-gitlab
ssh key 对gitlab来说有其唯一性,也就是说一个ssh对应唯一一个用户,不能多个用户添加同一个ssh共啊哟。上面线路1、2没有违背这个说法,但内网服务器c把ssh同时放到用户 user1-1 和 用户 user2-2,gitlab辨认不了,就报错了(没理解错应该是这样)
注意注意~~~