对于 GitHub for Windows 本身,Paul Betts(GitHub 工作人员)温和地提醒大家,G4W 已经包含了一个凭证助手(基于CryptProtect和我想的CryptProtectData
功能)
请参阅下面的他的回答。
对于那些不使用 G4W 的人,请继续阅读。
添加到我之前的答案(通过控制台/命令行推送到 GitHub 时):
像~/.netrc
(在 Unix 上)或%HOME%/_netrc
(在 Windows 上)这样的文件可以帮助您避免在每次 git push 到 GitHub 时输入您的凭据。
您可以在一个netrc
文件中存储所需的任意数量的凭据。
(对于 GitHub 或其他 repo 托管服务提供商)
但是:
- 你不想存储你的主 GitHub 密码帐户
- 你不希望那些在纯文本文件中。
以下部分解决了这些问题:
(2013 年 9 月 3 日)
如果可以避免的话,通过应用程序配置 2FA,始终通过应用程序,永远不要通过短信。
原因是,通过该激活过程,您可以访问您的双因素密钥,它用于每 30 秒生成一次第二因素身份验证:
这样您就可以访问任何 GAuth ( Google Authenticator ) 客户端,输入相同的 2FA 密钥,并查看您通过 SMS 消息获得的完全相同的代码。
除此之外,如果您没有电话服务,它仍然可以工作;)
当然,第一个使用的客户端是您的 android 手机或 iphone 上的GAuth 。
这意味着您不必等待短信,并且可以将 2FA 保存在手机上。
但是,拥有您的密钥可以让您不局限于手机上的客户端。
您可以访问任何其他客户,例如:
对于所有这些客户端(在您的手机上使用 GAuth,或者使用桌面客户端或网页),您将需要您的两因素密钥。
如果您通过短信激活了 2FA:
- 你不知道你的密钥
- 您不能使用任何其他 GAuth 客户端
- 您只能通过手机接收令牌(如果您有电话服务和/或如果您有手机)
注意:如果您在 Android 上的 Gauth 客户端中添加了密钥,而没有记住第一个密钥,则一切都不会丢失。
(但你需要一部有根电话)
$ adb shell
# sqlite3 /data/data/com.google.android.apps.authenticator/databases/databases
sqlite> select * from accounts;
1|your@email.address|your2factorkey|0|0
sqlite> .quit
#exit
不要忘记获取并保存相关的恢复代码(在Account Settings
您的 GitHub 帐户部分):
(另请参阅关于保存这些代码的位置的最后一节)
加密您的_netrc
文件
(参见带有 git1.8.3+ 的凭证助手 netrc:gpg 加密)
您需要在该文件中至少加密这两个凭据:
machine github.com
login username
password xxxx
protocol https
machine gist.github.com
login username
password xxxx
protocol https
然后你只保留一个~/.netrc.gpg
或%HOME%/_netrc.gpg
但是,如果您启用上述新的双因素身份验证,“ xxxx
”将不是您的 GitHub 帐户:请参阅下一节有关“个人访问令牌”的内容。
生成个人访问令牌
如果您已激活 2FA,您将无法使用您的 GitHub 密码进行推送。
Anonymous access to user/repo.git denied
这是您将看到的(gpg
部分是因为我使用了netrc
凭证助手):
C:\Users\VonC\prog\git\git>git push origin
Using GPG to open %HOME%/_netrc.gpg: [gpg2 --decrypt %HOME%/_netrc.gpg]
You need a passphrase to unlock the secret key for
user: "auser <email@email.com>"
2048-bit RSA key, ID A2EF56, created 2012-09-12 (main key ID DC43D6)
remote: Anonymous access to VonC/git.git denied. <=====
fatal: Authentication failed for 'https://VonC@github.com/VonC/git/' <=====
因此,转到Developer
您的 GitHub 帐户部分(子部分Personal access tokens
),并生成个人访问令牌:
该令牌不需要双重身份验证:您可以将其用作_netrc
文件中的密码,并且可以直接推送到 GitHub。
但与您的主 GitHub 帐户密码的区别在于:
您可以撤销个人访问令牌(并生成一个新的),同时仍保持主密码不变。
如果您在~/.netrc.gpg
文件中加密了主 GitHub 密码,则可以将其替换为新的个人令牌:
gpg -d %HOME%\_netrc.gpg | sed "s/yourPassord/YourPersonalAccessToken/g" | gpg -e -r auser --yes -o %HOME%\_netrc.gpg
在多行中以提高可读性:
gpg -d %HOME%\_netrc.gpg |
sed "s/yourPassord/YourPersonalAccessToken/g" |
gpg -e -r auser --yes -o %HOME%\_netrc.gpg
借助类似 unix 的GoW(Windows 上的 Gnu)命令,这甚至在 Windows 上也有效,其中包括sed
.
保存您的 GitHub 凭据
我推荐像lastpass.com这样的在线凭证存储
您需要保存:
- 您的 GitHub 帐户密码
- 您的 2FA 密钥
- 您的 2FA 恢复代码
- 您的个人令牌