Gitlab 无法删除 ssh 密钥。不在 UI 但仍然有效

Gitlab Unable to delete ssh key. Not in UI but still works

版本 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 on-premise 服务器):

  • 打开关联的数据库并
  • 手动删除该条目。

检查database settings

我想我只需要澄清一下。这是导致我找到最终解决方案的答案,主要是因为我太害怕从实时数据库中删除条目:

以下查询帮助我找到了条目:

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 密钥相同,但它与 repos 绑定并且不遵守相同的过期规则(尽管部署令牌执行)

这在 UI 中很难找到,我的方法是查询每个项目的“deploy_keys”:

...api/v4/projects/<ID>/deploy_keys

请注意,该密钥可用于多个存储库。如果您从一个“禁用”它,它仍然可以在另一个存储库中使用,但您将不知道是哪些项目。幸运的是,只要您首先禁用密钥,就可以打开使用相同密钥的其他存储库(这就是我所做的并且浪费了更多时间来寻找另一个项目密钥存在)。