给定已在 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)
通过 GitLab 综合安装,您可以使用 Rails 控制台:
gitlab-rails console
> User.find(Key.find_by(fingerprint: '00:00:00:00...').user_id)
Run Code Online (Sandbox Code Playgroud)
将指纹的值替换为密钥的 md5 指纹。
在 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 管理员。