从GitHub将个人访问令牌存储在哪里?
在GitHub中生成个人访问令牌后,是否需要将其存储在机器上的某个本地位置从GitHub将个人访问令牌存储在哪里?,git,github,access-token,Git,Github,Access Token,在GitHub中生成个人访问令牌后,是否需要将其存储在机器上的某个本地位置 如果是,是否有任何首选的存储方式?好吧,如果您不想每次应用程序请求时都键入令牌,您必须将其保存在某个位置:-) 一个好的解决方案是使用环境变量,如中所述 但是您仍然需要在某个地方设置环境变量。 在Windows上(我正在使用),您可以在系统设置中使用(我不知道其他操作系统是否有类似的设置) 我不这样做,我更喜欢在我的项目中使用脚本。 在私有项目中,您可以将其提交给源代码管理,但这是一个偏好问题 在我的一个个人项目中,我也
如果是,是否有任何首选的存储方式?好吧,如果您不想每次应用程序请求时都键入令牌,您必须将其保存在某个位置:-) 一个好的解决方案是使用环境变量,如中所述 但是您仍然需要在某个地方设置环境变量。
在Windows上(我正在使用),您可以在系统设置中使用(我不知道其他操作系统是否有类似的设置) 我不这样做,我更喜欢在我的项目中使用脚本。
在私有项目中,您可以将其提交给源代码管理,但这是一个偏好问题 在我的一个个人项目中,我也在使用个人访问令牌调用GitHub API。
这是一个命令行应用程序,最终用户将把令牌保存在配置文件中(这是可以的) 但是我也需要开发令牌,因为该项目有集成测试,我在其中调用GitHub API 该项目在GitHub上是公共的,所以我无法在源代码管理中保存令牌 我所做的是:
- 我有一个名为
environment variables.bat的批处理文件(记住,我在Windows上),它设置了所有必需的环境变量,包括访问令牌
- 我在我的和我用来运行测试的
是环境变量。bat
- 但是在源代码管理中,有一个相反的,它包含相同的,但是一个伪造的令牌/密码
环境变量.bat
,用真实密码替换假密码,一切正常
不过,这并不是所有情况下的完美解决方案 在我的项目中,我遇到了一个问题,我需要在将来为更多的API使用更多的令牌/密码
因此,my
environment variables.bat
中的令牌数量将增加,这使得潜在贡献者很难实际执行所有集成测试。我仍然是。基本上我是在我的机器上这样做的:
我的配置文件脚本与描述的略有不同:
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
密码的一半意义在于(理想情况下)你记住它们,系统对它们进行散列,因此它们永远不会以纯文本形式存储在任何地方。然而GitHub的个人访问令牌系统似乎基本上强迫您以纯文本形式存储令牌 首先,a不是一个简单的密码,而是一个等价物:
- 您可以多次生成(例如,每台需要访问GitHub存储库的机器一次)
- 您可以随时(从GitHub web界面)撤销该PAT,这使得该PAT过时,即使它在其中一台机器上徘徊
由于在命令行或API上使用Git通过HTTPS执行Git操作时,可以使用PAT代替密码,因此您可以使用安全缓存它。
例如,在Windows上,将通过以下方式使用: 当您第一次推动回购时,弹出窗口将询问您的凭证:用户名和PAT。
下一次,它将不会询问,并直接重用PAT,它将安全地存储在您的凭证管理器中 类似的想法也适用于Linux和Linux(在2021年,它将,)。
想法仍然是:将PAT存储在加密的凭证存储中
更现代的解决方案(2020年第4季度)是 您需要安装git credential manager core,下载它的
sudo dpkg-i
git凭据管理器核心配置
Linux支持尚未完全实现,但很快就会实现
尽管如此,在Linux上使用GCM(Git Credential Manager Core),如中所述,您需要首先定义一个Git-config--global-Credential.credentialStore
见“”:
有四个选项用于存储Git Credential Manager Core(GCM Core)在Linux平台上管理的凭据:
- GPG/兼容文件
- Git内置的
- 纯文本文件
您可以通过设置
GCM\u credential\u store
环境变量或credential.credentialStore
Git配置设置来选择要使用的凭据存储
如中所述,在安装libsecret-1-0
和libsecret-1-dev
后使用git-credential-libsecret
是很好的第一步。但这最终应该由
凭证管理器核心
包装,我喜欢在存储库中对它们进行加密,并使用.envrc
()
为此,我使用my加密数据,例如:
echo MY_TOKEN="secret" | ssh-vault -u <github-user> create > my-encypted-vars.ssh
这将解密my encrypted vars.ssh
文件中的数据,并在每次我cd
进入项目目录时将my_TOKEN
设置到我的环境变量中
通过这样做,令牌/变量被“安全地”存储,并随时可以用作环境变量 git:“凭据管理器”不是git命令 但是
store
而不是manager
工作得很好:
git config --global credential.helper store
您可以使用以下方法在定义的时间内缓存凭据:
git config --global credential.helper cache
默认缓存周期为900秒(15分钟),但可以通过以下方式更改:
git config --global credential.helper 'cache --timeout=3600'
请参见以下Github页面:
这不是一个永久存储,根据其他注释,凭据不应以纯文本形式存储,这存在安全风险。我使用密码管理器()来存储密码
echo "Enter ssh key password"
context=$(ssh-vault view $HOME/projects/my-encrypted.ssh | tail -n +2)
export ${context}
git config --global credential.helper store
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
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
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
git remote set-url origin https://user1@github.com/user1/myRepo1.git
git remote set-url origin https://user2@github.com/user1/myRepo1.git
^^^^^
[credential]
helper = /usr/bin/git-credential-manager-core
credentialStore = secretservice
[credential "https://dev.azure.com"]
useHttpPath = true