You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gogs添加公钥报错:公钥内容已被使用,求解决方案

排查与解决方案

听起来你遇到了Gogs里公钥添加的棘手问题,结合你有服务器和数据库权限的情况,我整理了几个针对性的排查和解决步骤,应该能帮你搞定:

  • 检查数据库中已存在的公钥记录
    Gogs的公钥唯一性校验是基于数据库存储的,提示“Public key content has been used”说明该公钥内容已经在数据库里存在,哪怕不是当前用户添加的。你可以直接查询数据库确认:

    • 登录Gogs数据库(根据你的配置选择SQLite或MySQL命令):
      • SQLite:sqlite3 /path/to/gogs/data/gogs.db
      • MySQL:mysql -u [数据库用户名] -p gogs
    • 执行查询语句:SELECT id, owner_id, content FROM public_key;
    • 将用户要添加的公钥内容和查询结果对比,看是否被其他用户(包括已删除的用户)占用。
  • 清理残留的已删除用户公钥
    有时候用户被删除后,对应的公钥记录可能残留在数据库中,导致新用户无法添加相同公钥(哪怕你换了多组PuTTY密钥,也可能这些密钥之前被测试用户添加过):

    • 先查询用户表确认有效用户:SELECT id, name FROM user;
    • 如果公钥对应的owner_id不在有效用户列表里,直接删除这条残留记录:DELETE FROM public_key WHERE id = [残留公钥的ID];
  • 修正PuTTY密钥格式
    PuTTY生成的公钥默认格式和Gogs要求的OpenSSH格式可能不兼容,Gogs只支持开头为ssh-rsa/ssh-ed25519这类标准OpenSSH格式的公钥:

    1. 打开PuTTYgen,加载用户的.ppk私钥文件
    2. 点击Conversions -> Export OpenSSH key,导出兼容格式的私钥
    3. 复制PuTTYgen界面中“Public key for pasting into OpenSSH authorized_keys file”框内的内容,这才是符合Gogs要求的公钥格式,再尝试添加。
  • 检查并修复数据库唯一性约束
    确认public_key表的content字段是否存在唯一约束,这是Gogs校验公钥唯一性的核心:

    • SQLite:执行PRAGMA table_info(public_key);,查看content字段是否有UNIQUE标记
    • MySQL:执行DESCRIBE public_key;,查看content字段的Key列是否为UNI
    • 如果约束缺失,手动添加:
      • MySQL:ALTER TABLE public_key ADD UNIQUE(content);
      • SQLite:CREATE UNIQUE INDEX idx_public_key_content ON public_key(content);
  • 重启Gogs服务生效
    修改数据库后,重启Gogs服务确保缓存刷新:

    • 若用systemd管理:systemctl restart gogs
    • 直接进程操作:killall gogs && /path/to/gogs/gogs web

内容的提问来源于stack exchange,提问作者Shiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:13:19