在 GitHub 中生成个人访问令牌后,是否需要将其存储在机器本地的某个位置?
如果是,是否有任何首选方式可以存储它?
密码的一半是(理想情况下)您记住它们并且系统对它们进行哈希处理,因此它们永远不会以纯文本形式存储在任何地方。 然而 GitHub 的个人访问令牌系统似乎基本上迫使您以纯文本形式存储令牌?
首先,PAT(个人访问令牌)不是简单的密码,而是等效的:
这与您的密码不同,密码对您的帐户来说是唯一的,并且不能轻易更改,而无需在您碰巧使用它的任何地方都对其进行修改 。
由于在命令行或 API 上使用 Git 通过 HTTPS 执行 Git 操作时,可以使用 PAT 代替密码,因此您可以使用git credential helper安全地缓存它。 例如,在 Windows 上,这将使用Windows CredentialManager,通过GCM——Git CredentialManager——适用于 Windows、Mac 或 Linux:
git config --global credential.helper manager-core
第一次推送到仓库时,弹出窗口会询问您的凭据:用户名 和 您的 PAT。 下一次,它不会询问并直接重用该 PAT,该 PAT 仍安全地存储在您的凭据管理器中。
类似的想法适用于带有 OSX 钥匙串的 Mac和带有GNOME 钥匙圈的 Linux (在 2021 年,它需要一个 DBus会话和libsecret),但在 2021 年,GCM-Core 涵盖了这些用例。 这个想法仍然存在:将 PAT 存储在 加密 的凭据存储中。
libsecret
我在无头服务器上尝试输入令牌时出现以下错误:
Remote error from secret service: org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login store failed: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
这是在无头服务器上为我工作的解决方案(请参阅 https://keyring.readthedocs.io/en/latest/#using-keyring-on-headless-linux-systems):
git-credential-libsecret``credential.helper
# You may also first install gnome-keyring if not installed sudo apt install gnome-keyring sudo apt install libsecret-1-0 libsecret-1-dev cd /usr/share/doc/git/contrib/credential/libsecret sudo make git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
git push
dbus-run-session -- sh # Replace 'sh' with whatever shell you use. gnome-keyring-daemon --unlock # Enter your token here, then hit Enter, then Ctrl+d # You might clean the terminal display with Ctrl+l for security reasons
这会运行一个 D-Bus 会话,例如我可以在其中运行git push自动身份验证等。
如上所述,更现代的解决方案(2020 年第四季度)是Microsoft Git-Credential-Manager- Core
你需要安装git-credential-manager- core它,下载它的最新版本,比如gcmcore- linux_amd64.2.0.474.41365.deb
git-credential-manager- core
gcmcore- linux_amd64.2.0.474.41365.deb
sudo dpkg -i <path-to-package> git-credential-manager-core configure
尽管如Mekky Mayata在评论中指出的那样,使用 Linux 上的 GCM(Git-Credential-Manager-Core) ,您需要先定义一个git config --global credential.credentialStore。
git config --global credential.credentialStore
请参阅“ Linux 上的凭证存储 ”:
Git Credential Manager (GCM) 在 Linux 平台上管理的存储凭证有四个选项: freedesktop.org 秘密服务 API GPG/pass兼容文件 Git 的内置凭证缓存 纯文本文件 默认情况下, 未 配置 GCM。您可以通过设置环境变量或Git 配置设置 来选择要使用的凭证存储。GCM_CREDENTIAL_STORE``credential.credentialStore
Git Credential Manager (GCM) 在 Linux 平台上管理的存储凭证有四个选项:
pass
默认情况下, 未 配置 GCM。您可以通过设置环境变量或Git 配置设置 来选择要使用的凭证存储。GCM_CREDENTIAL_STORE``credential.credentialStore
GCM_CREDENTIAL_STORE``credential.credentialStore
正如在评论git-credential-libsecret中指出的那样,安装后libsecret-1-0使用是libsecret-1-dev一个很好的第一步。 但是,同样,它现在应该被credential-manager-core.
git-credential-libsecret
libsecret-1-0
libsecret-1-dev
credential-manager-core