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

Cur*_*son 10 ssh-keys gitlab

给定已在 GitLab 注册的 SSH 公钥或指纹,我如何找出与该密钥关联的帐户?

请注意,该密钥可能已注册为“部署密钥”,在这种情况下,我想知道注册它的帐户。

我更想知道如何使用标准 Web UI(如果可能)以及通过 REST API 以编程方式执行此操作。如果这两者都不可能,那么如有必要,我将采取涉及挖掘 GitLab 内部结构的答案(例如,通过对 GitLab 数据库的查询)。

Joo*_*tse 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)
Run Code Online (Sandbox Code Playgroud)

  • `从用户 a、密钥 b 中选择 a.name、a.username、b.key,其中 a.id=b.user_id 和 b.key like '%your_key%';` (2认同)

rpe*_*tti 8

通过 GitLab 综合安装,您可以使用 Rails 控制台:

gitlab-rails console
> User.find(Key.find_by(fingerprint: '00:00:00:00...').user_id)
Run Code Online (Sandbox Code Playgroud)

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


doe*_*eri 3

在 GitLab 12.6 中,Keys API引入了一种通过 SSH 密钥指纹获取用户的方法。

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"
Run Code Online (Sandbox Code Playgroud)

如果密钥恰好是部署密钥,则在 GitLab 12.7 中,同一keys端点也得到增强,可以通过部署密钥指纹来获取用户

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