从GitHub存储个人访问令牌的位置?

Krz*_*ski 30 git github access-token

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

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

Jav*_*tón 49

就我而言,在 Ubuntu 中,接受的解决方案不适用于类似的消息

git: 'credential-manager' 不是 git 命令

store不是manager很好地工作:

git config --global credential.helper store
Run Code Online (Sandbox Code Playgroud)

  • 这似乎以纯文本形式将您的令牌存储在 ~/.git-credentials 中 (22认同)
  • 只是为此添加一个注释 - 启用此功能后,系统将在下次提交时提示您输入信用信息。之后,它们被存储。 (7认同)
  • 只是一个快速提示,如果您只想为特定存储库添加此配置,请删除 --global (7认同)
  • 我发现当人们在发出警告后至少提供一个链接时,这确实很有帮助。请查看[此处](https://askubuntu.com/a/959662/443958),了解有关如何安全“存储”PAT 并使用 git 工作流程的重要说明。只需 3 行代码。 (2认同)

Asw*_*ath 35

要将您的凭据存储在缓存中并避免每次执行 git 操作时都登录,请按照以下步骤操作:

  1. 导航到本地存储库文件夹。
  2. 在当前文件夹的终端中:git config --global --replace-all credential.helper cache
  3. 执行git pushgit pull.
  4. 使用用户名和访问令牌登录(访问令牌是您的密码)。令牌可以在 GitHub 中设置,并有权访问存储库、工作流程、写入:包和删除:包。
  5. 重复git push或任何 git 操作,您会发现从现在开始它不再要求登录凭据。


Von*_*onC 23

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

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

  • 你可以生成多个时间(例如,每台机器需要访问一个GitHub存储库)
  • 您可以随时撤销(从GitHub Web界面),这使得PAT过时,即使它在其中一台机器上徘徊.

这不同于您的密码,这是唯一的帐户,不能不必轻易改变修改它无处不在,你碰巧使用它.


由于在命令行或API上使用Git通过HTTPS执行Git操作时可以使用PAT代替密码,因此您可以使用git凭据帮助程序安全地缓存它.
例如,在Windows上,通过GCM-Git Credential Manager for Windows将使用Windows Credential Manager:

git config --global credential.helper manager
Run Code Online (Sandbox Code Playgroud)

第一次推送回购时,弹出窗口会询问您的凭据:用户名 PAT.
下一次,它不会询问,并直接重用那个仍然安全存储在Credential Manager中的PAT.

类似的想法适用于带有OSX钥匙串的Mac和带有GNOME Keyring的 Linux .
这个想法仍然存在:将PAT存储在加密的凭证存储中.

  • 您链接的 GNOME Keyring 解决方案不适用于 Ubuntu 20.04,因为 [libgnome-keyring-dev 软件包在该套件中不可用](https://packages.ubuntu.com/focal/libgnome-keyring-dev)。这就是你所说的Linux支持尚未完全实现的意思吗?有哪些推荐的解决方法?我可以在哪里查看进展情况? (2认同)
  • @Mxt GCM-Core 现在确实支持 Linux (https://github.com/microsoft/Git-Credential-Manager-Core/blob/master/docs/linuxcredstores.md),它现在是官方的解决方法。 (2认同)
  • 最后两行在`git push`之后给我以下错误:`/var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/git-credential-manager-core get: 1: / var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/git-credential-manager-core:找不到` (2认同)

The*_*ran 10

Ubuntu 20.04上测试,几乎全新安装,使用 Git 2.25.1 和 unity 7.5。

认证基础

Github 需要一个身份验证密钥(具有与所述身份验证密钥相关联的某些权限)。特定的身份验证密钥具有某些权限(读取私有存储库、读写公共存储库等...)并且“充当密码”以及可以在用户需要时随时撤销的权限。

个人访问令牌

  1. 我们从制作PAT开始。IE,设置 --> 开发人员设置 --> Persaonl 访问令牌 --> 生成新令牌 --> 注意 --> 设置权限(可能是 repo,repo_hook) --> 生成令牌
  2. git push 存储库并在询问时键入生成的令牌(很长的密码)作为密码。

以不同方式存储密码

    • 可以在文件中完成,然后使用xclip将其带回剪贴板并每次粘贴(拧这个)
    • 在 git 命令帮助下缓存git config credential.helper cache <time-limit-of-cache>。但是您仍然必须在时间限制后以某种方式剪贴密码。
    • 使用 git 命令将 其永久存储在文件中git config credential.helper store(不要使用 --global)。这不是加密的。您可以打开文件并阅读它。(例如,如果有人访问您的笔记本电脑,他们几乎可以使用可启动 USB 读取密码(假设您的整个系统未加密))。
    • 或者按照这里走加密路线。它一点也不复杂。3个简单的步骤。
sudo apt-get install libsecret-1-0 libsecret-1-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret
    
git config credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
Run Code Online (Sandbox Code Playgroud)

这允许以加密格式存储密码/个人访问令牌。该git config文件可以在中找到.git/config你的LOCA回购文件,如在这里,如果你需要它。

PS 有很多地方建议使用Gnome-keyring但这显然弃用

为多个帐户存储密码/PAT

这变得很棘手,而且@VonC 建议我们需要一个Git-Credential-Manager core(GCM 核心)。根据我在此答案中的发现,此答案得到了增强。

  1. 首先安装 GCM 核心

    1. 下载最新的 .deb 包
    2. sudo dpkg -i <path-to-package>
    3. git-credential-manager-core configure
    4. git config --global credential.credentialStore secretservice 当我们使用 libsecret
  2. 获取最新的 git

    就我而言,我有 git 2.25 并得到了 error error: unknown option 'show-scope'。看来 GCM 核心正在使用更高的 git(至少 2.26)。

    因此,请git按照此处安装最新和最好的:

     sudo add-apt-repository ppa:git-core/ppa
     sudo apt-get update
     apt list git # shows the latest git currently 2.31
     sudo apt-get install git #or sudo apt-get upgrade
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用内置的用户名更新 git 远程路径

    GCM 核心需要它来识别不同的帐户。:(

     git remote set-url origin https://user1@github.com/user1/myRepo1.git
     git remote set-url origin https://user2@github.com/user1/myRepo1.git
                                   ^^^^^
    
    Run Code Online (Sandbox Code Playgroud)

~/.gitconfig因此,您的文件将具有以下内容:

[credential]
   helper = /usr/bin/git-credential-manager-core
   credentialStore = secretservice
[credential "https://dev.azure.com"]
   useHttpPath = true
Run Code Online (Sandbox Code Playgroud)

  • 你的回答很有用,但太戏剧化了。这就是我所做的全部`git remote set-url origin https://username:your-personal-access-token@github.com/username/repo.git` (2认同)

zra*_*ash 6

或者,您可以~/.netrc在主目录中创建一个文件并将您的登录凭据保存到其中。

cat ~/.netrc
machine github.com login <login-id> password <token-password>
Run Code Online (Sandbox Code Playgroud)

  • 这就像一个魅力并且非常实用。+1。对我来说,答案已经很清楚了。 (4认同)
  • 请对您的回答进行详细说明,以便下一位用户更好地理解您的回答。 (2认同)
  • 此链接中解释了 netrc 文件及其与 inetutils 的链接的详细信息。https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html (2认同)
  • @JwalaKumar 只需在您的 Linux 主目录中创建一个名为“.netrc”的文件,并包含答案中所示的内容。如果您使用的是 Windows,请尝试此 /sf/ask/422185011/ (2认同)

joh*_*ope 6

尝试启用此功能以帮助坚持推/拉

git config credential.helper store
Run Code Online (Sandbox Code Playgroud)

对于持续克隆存储库 / 对于 macOS 用户 / 安装 iTerm2 https://iterm2.com/

在此输入图像描述

启用工具带

在此输入图像描述

只需在需要时单击该片段即可。PS你正在使用oh-my-zsh,不是吗? https://github.com/ohmyzsh/ohmyzsh


nba*_*ari 5

我喜欢将它们加密在存储库中并使用.envrc( https://direnv.net/ )加载它们

为此,我使用ssh-vault使用GitHub 已经公开的 ssh 密钥来加密数据,例如:

echo MY_TOKEN="secret" | ssh-vault -u <github-user> create > my-encypted-vars.ssh
Run Code Online (Sandbox Code Playgroud)

然后内容.envrc看起来像这样:

echo "Enter ssh key password"
context=$(ssh-vault view $HOME/projects/my-encrypted.ssh | tail -n +2)
export ${context}
Run Code Online (Sandbox Code Playgroud)

每次我进入项目目录时,这都会解密my-encrypted-vars.ssh文件中的数据并设置MY_TOKEN到我的环境变量中cd

通过这样做,令牌/变量被“安全地”存储并随时准备用作环境变量

  • 我更喜欢使用官方凭证存储,正如我[在我的回答中](/sf/answers/3605379221/) 所解释的那样,但是您对专用保险库的提议很有趣。+1 (2认同)

Mel*_*Dal 5

使用 git代替。基本上用您的访问令牌 + https:// 替换每个 https://github 调用

git config --global url."https://<username>:<github-token>@github.com/".insteadOf "https://github.com/

现在,每次对 github 的调用都会自动附加您的凭据。

我在这里找到了这个很好的答案。有关gitratherOf 的更多信息。