问题描述
版本Gitlab CE 13.3.5
我们遇到的问题是用户拥有旧的SSH密钥,而他们不再使用该密钥。用户想要删除SSH密钥。但是,它在用户帐户的UI中不可用。
当我们使用以下API查找用户ssh密钥时,它并不存在: https://gitlab.server/api/v4/users/someuser/keys
但是,如果我要查找通过Gitlab注册的所有SSH密钥的循环,我可以找到它: https://gitlab.server/api/v4/users/keys/$KeyIdNumber
如何删除SSH密钥,使其无法使用。这是一个潜在的安全风险,因为私钥将被泄露,那么在没有删除用户的情况下将无法阻止访问。作为测试,在阻止用户时,SSH密钥仍然有效。
似乎无法通过API删除密钥。
解决方法
由于key API仅具有“ GET”操作,所以我要求(您的GitLab本地服务器的)GitLab管理员执行以下操作:
- 打开关联的数据库,然后
- 手动删除该条目。
我想我只需要澄清一下。这是导致我找到最终解决方案的答案,主要是因为我太害怕从实时数据库中删除条目:
以下查询帮助我找到了条目:
select * from keys where id = 27;
如果这实际上是SSH密钥的问题,则可以使用以下查询更新expiration_at列以使密钥失效:
UPDATE keys SET expires_at = '2020-09-17 08:42:00+02' WHERE id = 27 RETURNING *;
输出实际上告诉我,密钥“ type”是“ DeployKey”,它与SSH密钥本质上相同,但是它与存储库绑定并且不遵循相同的到期规则(尽管部署令牌可以这样做)
这在用户界面中很难找到,我的方式是查询每个项目的“ deploy_keys”:
...api/v4/projects/<ID>/deploy_keys
警告该密钥可以在多个存储库中使用。如果您从其中一个“禁用”它,它将在另一个存储库中仍然可用,但是您将不知道哪个项目。幸运的是,只要您先不要禁用该密钥,就可以打开使用相同密钥的其他存储库(这是我所做的,浪费了更多时间查找存在该密钥的另一个项目)。