不小心删除了提交到 GitHub 的密码
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
额外福利——你也可以在我的Twitch 直播间观看我谈论这件事。
不小心删除了提交到 GitHub 的密码
日复一日地编写代码,难免会无意间将密钥、连接字符串等信息添加到代码中。如果你和我一样,它们很可能被提交到你的 GitHub 代码库,然后你就只能默默承受这份尴尬了。:) 在这篇文章中,我将一步步指导你如何从已经提交过密钥的 GitHub 代码库中删除它们。
第一部分 - 初始设置:
场景:您已将一个值为 `<password>` 的密码提交qph@}uC,7cGLBdsX到您的 GitHub 代码库。此密码应保密,不应存储在代码中。
如何解决这个问题?
- 请确保仓库已安装在本地磁盘上,或者使用 HTTPS 或 SSH 克隆一份全新的副本。我将以 SSH
git clone git@github.com:mbcrump/crumpbot.git为例进行说明。 - 使用镜像选项克隆一个存储了密钥的仓库副本,如下所示
git clone --mirror git@github.com:mbcrump/crumpbot.git。 - 现在您将拥有一个 BARE 仓库。使用 `cd` 命令进入该仓库
cd crumpbot.git,然后ls -l在 macOS 或 Windows 系统上运行 `ls` 命令列出其内容dir。
以下是我的代码仓库示例。
[mbcrump@Michaels-MBP-3]:[~/Documents/code]$ cd crumpbot.git
[mbcrump@Michaels-MBP-3]:[~/Documents/code/crumpbot.git] (BARE:master)$ ls -l
total 32
-rw-r--r-- 1 mbcrump staff 23 Dec 1 19:47 HEAD
-rw-r--r-- 1 mbcrump staff 211 Dec 1 19:47 config
-rw-r--r-- 1 mbcrump staff 73 Dec 1 19:47 description
drwxr-xr-x 13 mbcrump staff 416 Dec 1 19:47 hooks
drwxr-xr-x 3 mbcrump staff 96 Dec 1 19:47 info
drwxr-xr-x 27 mbcrump staff 864 Dec 1 19:48 objects
-rw-r--r-- 1 mbcrump staff 105 Dec 1 19:47 packed-refs
drwxr-xr-x 4 mbcrump staff 128 Dec 1 19:47 refs
第二部分 - 创建一个包含您想要删除的密码的文件:
- 创建一个
passwords.txt文件,并将要从 GitHub 仓库中删除的密码放入其中。
我在 macOStouch passwords.txt或echo some-text > passwords.txtWindows 上创建了我的账户,并添加了我不小心输错的密码:
qph@}uC,7cGLBdsX
- 保存文件。
第三部分 - 安装 BFG:
进入BFG的世界。作者如是说:
BFG 是 git-filter-branch 的一个更简单、更快捷的替代方案,用于清理 Git 仓库历史记录中的不良数据:
删除超大文件、
删除密码、凭据和其他私有数据
- 如果您已安装 Homebrew 并且使用的是 Mac,则可以安装BFG;如果您使用的是 Windows,则可以下载JAR 文件。
brew install bfg
第四部分 - 清理之前提交的密码:
-
bfg --replace-text passwords.txt crumpbot.git在 Mac 上运行,或者java -jar bfg.jar --replace-text passwords.txt crumpbot.git使用 JAR 文件。 -
以下是该命令的输出结果:
[mbcrump@Michaels-MBP-3]:[~/Documents/code]$ bfg --replace-text passwords.txt crumpbot.git
Using repo : /Users/mbcrump/Documents/code/crumpbot.git
Found 2489 objects to protect
Found 2 commit-pointing refs : HEAD, refs/heads/master
Protected commits
-----------------
These are your protected commits, and so their contents will NOT be altered:
* commit 58969937 (protected by 'HEAD')
Cleaning
--------
Found 11 commits
Cleaning commits: 100% (11/11)
Cleaning commits completed in 96 ms.
Updating 1 Ref
--------------
Ref Before After
---------------------------------------
refs/heads/master | 58969937 | 3f9041c9
Updating references: 100% (1/1)
...Ref update completed in 24 ms.
Commit Tree-Dirt History
------------------------
Earliest Latest
| |
D D D D DD D D m m m
D = dirty commits (file tree fixed)
m = modified commits (commit message or parents changed)
. = clean commits (no changes to file tree)
Before After
-------------------------------------------
First modified commit | 39e68d03 | 95e6f9f4
Last dirty commit | 2007b5c5 | 0f57a693
Changed files
-------------
Filename Before & After
--------------------------------------------------------
bot.js | 1b55a8d0 ⇒ 02758dd8, cba19782 ⇒ db95f8c2, ...
In total, 19 object ids were changed. Full details are logged here:
/Users/mbcrump/Documents/code/crumpbot.git.bfg-report/2019-12-01/19-48-22
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive
第五部分 - 推送到 GitHub:
git reflog expire --expire=now --all && git gc --prune=now --aggressive按照输出指示运行。- 运行命令
git push将其推送到您的仓库。
第六部分 - 总结并验证您的仓库是否已成功更新:
如果你回到你的 GitHub 仓库并查看之前的提交记录,你应该会看到类似这样的*已移除*:
var tmi = require("tmi.js")
var channel = "mbcrump"
var config = {
options: {
debug: true
},
connection: {
cluster: "aws",
reconnect: true
},
identity: {
username: "mbcrump",
password: "***REMOVED***"
},
channels: [channel]
}
正如https://twitter.com/grierson_david指出的那样
此类提交应始终视为密码泄露。
无法保证泄露的密码没有被复制到其他地方,因此应始终将其视为已泄露并予以更改。
希望这对大家有所帮助,如果想保持联系,可以在Twitch、Twitter或GitHub上找到我。
文章来源:https://dev.to/mbcrump/remove-passwords-comfilled-to-github-on-accident-1oj9