在GitHub中生成个人访问令牌后,是否有必要将其存储在机器本地的某个地方?
如果是,是否有首选的存储方式?
在GitHub中生成个人访问令牌后,是否有必要将其存储在机器本地的某个地方?
如果是,是否有首选的存储方式?
当前回答
在我的用例中,我将PAT存储在密码管理器中,例如LastPass, KeePass, 1Password。当我在Linux环境(例如Docker)中需要它时,我将PAT保存在一个环境变量中,然后使用git的凭据帮助器设置。例如:
git config --global credential.helper 'cache --timeout 600'
<< eof tr -d ' ' | git credential-cache store
protocol=https
host=github.com
username=nonce
password=${GITHUB_PAT}
eof
对于PAT,用户名可以是任何东西,除了空白。以下是详细阐述的要点:
https://gist.github.com/rwcitek/da862e9e27cc28d3e96e62a2ca4b2b64
其他回答
在我的用例中,我将PAT存储在密码管理器中,例如LastPass, KeePass, 1Password。当我在Linux环境(例如Docker)中需要它时,我将PAT保存在一个环境变量中,然后使用git的凭据帮助器设置。例如:
git config --global credential.helper 'cache --timeout 600'
<< eof tr -d ' ' | git credential-cache store
protocol=https
host=github.com
username=nonce
password=${GITHUB_PAT}
eof
对于PAT,用户名可以是任何东西,除了空白。以下是详细阐述的要点:
https://gist.github.com/rwcitek/da862e9e27cc28d3e96e62a2ca4b2b64
以我为例,在Ubuntu中,被接受的解决方案不能处理像这样的消息
Git: 'credential-manager'不是Git命令
但是店长却做得很好:
git config --global credential.helper store
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
gh auth login
它将要求输入协议和令牌
然后我再次克隆回购。它不是要信物
在Ubuntu 20.04上测试,几乎是全新安装,使用Git 2.25.1和unity 7.5。
身份验证基础
Github需要一个认证密钥(与该认证密钥绑定的某些权利)。一个特定的认证密钥具有一定的权限(读取私有回购、读写公共回购等),并且“充当密码”,同时具有用户可以随时撤销的权限。
个人访问令牌
我们从PAT开始。即设置——>开发人员设置——> personaonl访问令牌——>生成新的令牌——>注意——>设置权限(repo,repo_hook可能)——>生成令牌 Git推送回购,并在请求时输入生成的令牌(很长的密码)作为密码。
以不同的方式存储密码
Can be done in a file and then using xclip to bring it back to clipboard and paste it everytime (Screw this) Cache with the help of git commands git config credential.helper cache <time-limit-of-cache>. But you still have to somehow clipboard the password after the timelimit. Store it permanently in a file with git commands git config credential.helper store (don't use --global). This is NOT ENCRYPTED. You can open the file and read it. (e.g., If someone gets access to your laptop they can pretty much read the Password using a bootable USB (assuming your whole system is not encrypted)). Or go the encryption route as per here. It is not complicated at all. 3 simple steps.
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
这允许以加密格式存储密码/个人访问令牌。git配置文件可以在loca repo的.git/config文件中找到,如这里所示,如果您需要它的话。
注: 有许多地方建议使用Gnome-keyring,但显然不建议使用。
存储多个帐户的密码/ pat
这变得很棘手,@VonC建议我们需要一个git - credentials - manager核心(GCM核心)。这个答案是基于我在这个答案中的发现而加强的。
First install GCM core Download latest .deb package sudo dpkg -i <path-to-package> git-credential-manager-core configure git config --global credential.credentialStore secretservice as we use libsecret Get latest git In my case I had git 2.25 and got error error: unknown option 'show-scope'. It appears that GCM core is using higher git (atleast 2.26). So install the latest and greatest git as per here: 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 Update git remote path with username built in GCM core needs this to identify the different accounts.:( git remote set-url origin https://user1@github.com/user1/myRepo1.git git remote set-url origin https://user2@github.com/user1/myRepo1.git ^^^^^
你的~ /。因此,Gitconfig文件将具有以下内容:
[credential]
helper = /usr/bin/git-credential-manager-core
credentialStore = secretservice
[credential "https://dev.azure.com"]
useHttpPath = true
你可以使用pass存储github https令牌。
将git主机映射到pass条目的两个备选方案:
Bash脚本映射到右传递项:
#!/usr/bin/env bash
# assuming "get" action from git and a config like this
# git config --global credential.helper $XDG_BIN_HOME'/git_credentials_from_pass $@'
while IFS= read -r line
do
echo "$line"
if [[ "$line" =~ host=.*github.com.* ]]; then
echo "username=your_user_name"
echo "password=$(pass show token_github.com/your_username)"
#else ...
fi
done
改变your_username和token_github.com的方式,你设置它通过pass插入。
这将添加令牌传递,无需输入或粘贴两次:
echo your_github_token | sed p | pass add token_github.com/your_username
安装pass-git-helper:
git config --global credential.helper '!pass-git-helper $@'
pass-git-helper需要一个ini文件来映射git请求和pass条目。 $ {XDG_CONFIG_HOME} / pass-git-helper git-pass-mapping.ini例子:
[DEFAULT]
username_extractor=entry_name
[github.com*]
target=token_${host}/your_github_username