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)
Asw*_*ath 35
要将您的凭据存储在缓存中并避免每次执行 git 操作时都登录,请按照以下步骤操作:
git config --global --replace-all credential.helper cachegit push或git pull.git push或任何 git 操作,您会发现从现在开始它不再要求登录凭据。Von*_*onC 23
密码的一半是(理想情况下)你记住它们并且系统对它们进行哈希处理,因此它们永远不会以纯文本形式存储在任何地方.
然而,GitHub的个人访问令牌系统似乎基本上迫使您以纯文本形式存储令牌?
首先,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存储在加密的凭证存储中.
The*_*ran 10
在Ubuntu 20.04上测试,几乎全新安装,使用 Git 2.25.1 和 unity 7.5。
认证基础
Github 需要一个身份验证密钥(具有与所述身份验证密钥相关联的某些权限)。特定的身份验证密钥具有某些权限(读取私有存储库、读写公共存储库等...)并且“充当密码”以及可以在用户需要时随时撤销的权限。
个人访问令牌
git push 存储库并在询问时键入生成的令牌(很长的密码)作为密码。以不同方式存储密码
xclip将其带回剪贴板并每次粘贴(拧这个)git config credential.helper cache <time-limit-of-cache>。但是您仍然必须在时间限制后以某种方式剪贴密码。git config credential.helper store(不要使用 --global)。这不是加密的。您可以打开文件并阅读它。(例如,如果有人访问您的笔记本电脑,他们几乎可以使用可启动 USB 读取密码(假设您的整个系统未加密))。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 核心)。根据我在此答案中的发现,此答案得到了增强。
sudo dpkg -i <path-to-package>git-credential-manager-core configuregit config --global credential.credentialStore secretservice 当我们使用 libsecret获取最新的 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)
使用内置的用户名更新 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)
或者,您可以~/.netrc在主目录中创建一个文件并将您的登录凭据保存到其中。
cat ~/.netrc
machine github.com login <login-id> password <token-password>
Run Code Online (Sandbox Code Playgroud)
尝试启用此功能以帮助坚持推/拉
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
我喜欢将它们加密在存储库中并使用.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。
通过这样做,令牌/变量被“安全地”存储并随时准备用作环境变量
使用 git代替。基本上用您的访问令牌 + https:// 替换每个 https://github 调用
git config --global url."https://<username>:<github-token>@github.com/".insteadOf "https://github.com/
现在,每次对 github 的调用都会自动附加您的凭据。
我在这里找到了这个很好的答案。有关gitratherOf 的更多信息。
| 归档时间: |
|
| 查看次数: |
20633 次 |
| 最近记录: |