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

如果是,是否有首选的存储方式?


当前回答

尝试启用此功能以帮助跨推/拉持久化

git config credential.helper store

对于正在克隆的repo / macOS用户/安装iTerm2 https://iterm2.com/

使直到

只要在需要时单击该片段即可。 另外,你在用哦,我的zsh,对吧? https://github.com/ohmyzsh/ohmyzsh

其他回答

好吧,你必须把令牌保存在某个地方,当你不想每次你的应用程序要求输入它时:-)

一个很好的解决方案是使用环境变量,正如在一个评论中已经建议的那样。

但你仍然需要在某处设置环境变量。 在Windows(我正在使用)上,你可以使用系统设置中的对话框(我不知道其他操作系统是否有类似的东西)。

我不这么做,我更喜欢在我的项目中使用脚本。 在私有项目中,您可以将此提交给源代码控制,但这是一个偏好问题。

在我的一个个人项目中,我也使用个人访问令牌调用GitHub API。 这是一个命令行应用程序,最终用户将在配置文件中保存令牌(这是OK的)。

但我也需要开发令牌,因为项目有集成测试,我正在调用GitHub API。

这个项目在GitHub上是公开的,所以我无法在源代码控制中保存令牌。

我所做的是:

我有一个批处理文件(记住,我在Windows上),名为environment-variables.bat,它设置所有必需的环境变量,包括访问令牌 我在构建脚本和用于运行测试的批处理文件中调用此函数 在源代码控制中会忽略Environment-variables.bat 但是在源代码控制中,有environment-variables.bat。相反,其中包含相同的,但假的令牌/密码。

因此,我只需将该文件重命名为environment-variables.bat,将假密码替换为真实密码,就可以正常工作了。


不过,这并不是所有情况下的完美解决方案。

在我的项目中,我有一个问题,我需要在未来为更多的api使用更多的令牌/密码。

因此,我的environment-variables.bat中的令牌数量将会增加,这使得潜在的参与者很难实际执行所有集成测试。我到现在都不知道该怎么办。

基本上我是在我的机器上做的:

https://gist.github.com/bsara/5c4d90db3016814a3d2fe38d314f9c23

我的配置文件脚本与描述略有不同:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
        . "$env" >| /dev/null ; 
}

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env
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

它将要求输入协议和令牌

然后我再次克隆回购。它不是要信物

安装Git凭证管理器!https://github.com/GitCredentialManager/git-credential-manager。GCM支持缓存以及在会话之间持久存在的各种特定于平台的凭据存储。

更棒的是:GCM支持用户友好的安全认证GitHub和GitLab通过web浏览器与OAuth。这意味着您甚至不再需要创建个人访问令牌。当你推送git时,只需按照链接到GitHub并授权应用程序。后续的身份验证不需要交互。

OAuth比个人访问令牌更安全,因为令牌的有效期很短,在需要时使用更长的刷新令牌进行刷新。

你可以使用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