GitLab:如何找到SSH密钥的所有者

10
给定已在GitLab注册的SSH公钥或指纹,如何找到与该密钥相关联的帐户?
请注意,该密钥可能已注册为“部署密钥”,在这种情况下,我想知道注册它的帐户。
我更喜欢知道使用标准Web UI(如果可能)和通过REST API以编程方式执行此操作的方法。如果这两者都不可能,我将接受需要深入了解GitLab内部(例如通过对GitLab数据库的查询)的答案。
4个回答

10

如果您可以访问Postgres控制台:

root@gitlab:/# gitlab-psql
    psql (9.6.8)
    Type "help" for help.

    gitlabhq_production=#
    gitlabhq_production=# select a.name,a.username,b.fingerprint 
from users a, keys b where a.id=b.user_id;

         name      | username |                   fingerprint                   
    ---------------+----------+-------------------------------------------------
     Administrator | root     | f4:cc:ec:76:d0:1c:86:1d:45:6d:a7:6e:b3:df:32:7c
    (1 row)

1
这被标记为已接受,因为它是目前为止最好的解决方案,但如果有更简单的解决方案,我也愿意接受。(听起来好像没有。) - cjs
2
select a.name,a.username,b.key from users a, keys b where a.id=b.user_id and b.key like '%your_key%'; - mumubin

8

使用GitLab Omnibus安装后,您可以使用rails控制台:

gitlab-rails console
> User.find(Key.find_by(fingerprint: '00:00:00:00...').user_id)

将指纹的值替换为密钥的MD5指纹。


3
在GitLab 12.6中,Keys API引入了一种方法,可以通过SSH密钥指纹获取用户。请注意保留HTML标签。
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/keys?fingerprint=01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef"

如果密钥恰好是部署密钥,在GitLab 12.7中,同样的keys端点已经得到增强,以便通过部署密钥指纹获取用户

请注意,这两种方法仅适用于GitLab管理员。


1

我没有看到任何公共API(例如用户API)可以将SSH密钥指纹作为参数。

我只看到它被用作内部API,以检索实际的SSH密钥:合并请求250

那段代码可以给你一个编写自己搜索的线索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接