每周一坑-gitlab报错添加重复ssh公钥

每周一坑-gitlab报错添加重复ssh公钥
  上周不是说停电导致某个系统的公司内网发布后台连不上么【https://www.cnblogs.com/windysai/p/16584301.html】,然后这周觉得必须要在2网段的服务器上做个备机,即使死了0网段的服务器,里面的后台全线崩溃,我也能把备机给运营用来发新闻,不至于把我祭天(满满的求生欲,哈哈哈~~~)
  话说这个问题的解决算是凑巧,因为6月20日的时候在gitee也遇到过,当时测试 tortoiseGit这个工具。那会问某俊,直接叫我换公钥 = =(也许是我提供的信息不够,人家也懒得帮分析),其实那会想反驳他,因为我再三确认没重复添加过,碍于当时完全没头绪,所以直接删光所有ssh公钥,加上去就行了(这肯定以后给自己埋下地雷)
  今天又遇到,这时是gitlab:

   千万千万不要按它提示的去做!!!

   这次我特意梳理了整个配置流程,请看图:

   内网服务器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

  对于后台项目2,这个绿色图标:,跟线路1是同一个人,具有拉取和推送代码的权限,需要把内网服务器b的ssh公钥添加到user1这个用户下;变得是紫色图标这个人:,对应流程图的 user2-2,当时为了好区分不同服务器、不同项目后台,所以特意用两个不同拉取代码的用户(紫色和蓝色图标)。
 
  上面的线路1、2都没有问题,问题出现在线路3:

   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辨认不了,就报错了(没理解错应该是这样)

   注意注意~~~

posted @ 2022-08-16 22:19  windysai  阅读(179)  评论(0编辑  收藏  举报