如果不小心把密钥提交到 github.com,可按以下方法删除:

删除 GitHub 上的 SSH 密钥

  1. 登录 GitHub 账户 :访问GitHub 官网,输入用户名和密码登录。
  2. 进入设置页面 :点击右上角的头像,选择 “Settings”。
  3. 进入 SSH 和 GPG 密钥设置 :在设置页面的左侧菜单中,找到并点击 “SSH and GPG keys”。
  4. 删除特定的 SSH 密钥 :在 SSH 密钥列表中,找到要删除的密钥,点击其右侧的 “Delete” 按钮,再在弹出的确认对话框中点击 “确认” 完成删除。

从代码仓库中删除密钥

如果密钥作为文件内容被提交到仓库,可使用以下两种方式清除提交记录:

使用 git filter-branch 命令

  1. 克隆仓库到本地 :如果还没有本地仓库,可使用 git clone <repository-url> 命令克隆。
  2. 运行 filter-branch 命令 :执行 git filter-branch --tree-filter 'rm -f 路径/到/文件' HEAD,将 路径/到/文件 替换为包含密钥的文件路径,这会从所有提交历史中删除该文件。
  3. 强制推送到远程仓库 :运行 git push origin --force --all 强制推送本地更改到远程仓库,覆盖远程的历史记录。
  4. 清理本地旧的未引用对象 :可执行 git reflog expire --expire=now --allgit gc --prune=now 命令清理本地旧的未引用对象,减少仓库占用空间。

使用 BFG Repo-Cleaner 工具

  1. 下载并安装工具 :访问BFG Repo-Cleaner 官方网站,按照指引下载并安装该工具。
  2. 运行清理命令 :执行 java -jar bfg.jar --delete-files 路径/到/文件 .git,将 路径/到/文件 替换为包含密钥的文件路径,该工具会扫描并清除该文件在所有提交历史中的记录。
  3. 强制推送到远程仓库 :与上述使用 git filter-branch 的操作相同,运行 git push origin --force --all
  4. 清理本地旧的未引用对象 :同样需要执行 git reflog expire --expire=now --allgit gc --prune=now 命令清理本地旧的未引用对象。

注意事项

  • 如果有其他人也在使用该仓库,在强制推送更改后,需要通知他们重新克隆仓库或同步更改。
  • 密钥泄露存在一定的风险,建议在删除提交后,立即重置已泄露的密钥或密码,以防被他人利用。
  • 为了预防类似情况再次发生,可在 .gitignore 文件中添加密钥文件的路径,避免其被再次提交到仓库。

标签: IT

添加新评论