小编典典

在哪里存储我的 Git 个人访问令牌?

all

在 GitHub 中生成个人访问令牌后,是否需要将其存储在机器本地的某个位置?

如果是,是否有任何首选方式可以存储它?


阅读 214

收藏
2022-05-05

共1个答案

小编典典

密码的一半是(理想情况下)您记住它们并且系统对它们进行哈希处理,因此它们永远不会以纯文本形式存储在任何地方。
然而 GitHub 的个人访问令牌系统似乎基本上迫使您以纯文本形式存储令牌?

首先,PAT(个人访问令牌)不是简单的密码,而是等效的:

  • 您可以生成多次(例如,每台需要访问 GitHub 存储库的机器一次)
  • 您可以随时 撤销 (从 GitHub Web 界面),这会使 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 存储在 加密 的凭据存储中。

我在无头服务器上尝试输入令牌时出现以下错误:

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 config --global credential.helper manager-core

你需要安装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

请参阅“ Linux 上的凭证存储 ”:

Git Credential Manager (GCM) 在 Linux 平台上管理的存储凭证有四个选项:

默认情况下, 配置 GCM。您可以通过设置环境变量或Git 配置设置
来选择要使用的凭证存储。GCM_CREDENTIAL_STORE``credential.credentialStore

正如在评论git-credential-libsecret中指出的那样,安装后libsecret-1-0使用是libsecret-1-dev一个很好的第一步。
但是,同样,它现在应该被credential-manager-core.

2022-05-05