吾八哥博客

您现在的位置是:首页 > DevOps > 代码管理 > 正文

代码管理

gitlab里查某SSH key挂在什么账户下的方法

吾八哥2020-04-18代码管理4949

问题场景

把某个ssh key加到某账户下,但加不进去,错误提示:Fingerprint has already been taken,而且这个key也无权限拉新仓库的代码想加下,不知道怎么加。

可能是加到某离职同学的名下了,但不知道是谁。

企业微信截图_daa1fcaa-791d-4b51-b962-156d7a99ed0d.png

解决方法

出现此问题的原因是因为这个ssh key已经被加到了其他账户下,在gitlab里ssh key只能被加一次。那么问题来了:被加到哪个账户下了呢?

ssh key可能会加到 某账户下的ssh key或某仓库的deploy keys

gitlab管理后台没有提供类似的查询方法,只能一个一个的用户或仓库下去看,但这种方法显然不可取,所以想到采用gitlab的api接口来实现,通过sskey的关键字来做grep搜索。假如关键词为:deploy@5bug.wang,这里偷懒采用枚举的方法去实现了。

  • 查询用户的SSH key

接口文档:https://gitlab.com/help/api/keys.md

Get SSH key with user by ID of an SSH key

curl --header "PRIVATE-TOKEN: <your_access_token>" 'https://gitlab.example.com/api/v4/keys/1

查某用户下挂了这个ssh key的shell暴力的实现方法如下,可查出用户的id:

#/bin/bash

for((i=1;i<=1000;i++));
do
	json=$(curl --header "PRIVATE-TOKEN: xxx" https://gitlab.example.com/api/v4/keys/$i)
	echo $json | grep "deploy@5bug.wang"
	if [[ $? -eq 0 ]]; then
		echo $i
		echo 
		break
	fi
done


  • 查询deploy keys

接口文档:https://gitlab.com/help/api/deploy_keys.md

List project deploy keys

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deploy_keys"

多个仓库可以使用同一个deploy keys,所以查哪些仓库使用这个deploy keys的shell脚本如下,可以查出仓库的id:

#/bin/bash

for((i=1;i<=1000;i++));
do
	json=$(curl -s --header "PRIVATE-TOKEN: csWBJ4ArqCN45M9GReVY" https://gitlab.example.com/api/v4/projects/$i/deploy_keys)
	echo $json | grep "deploy@5bug.wang"
	if [[ $? -eq 0 ]]; then
		echo $i
		echo 
	fi
done

上面俩方法是查出用户的id或仓库的id,继续查信息可以调用用户信息接口和仓库信息接口去查,而且这里采用的是暴力枚举的方法查的,实际上用户列表和仓库列表都可以通过api接口实现,稍微完善一下就可以实现一个比较好的查询接口,用于日常协助研发同学解决类似问题了。