我想在GitExtension中自动使用推拉功能,而不必每次都在提示中输入用户名和密码。
那么如何将我的凭据保存在git中呢?
我想在GitExtension中自动使用推拉功能,而不必每次都在提示中输入用户名和密码。
那么如何将我的凭据保存在git中呢?
Answers:
跑
git config --global credential.helper store
然后
git pull
提供用户名和密码,这些详细信息将在以后被记住。凭据存储在磁盘上的文件中,磁盘权限为“仅用户可读/可写”,但仍为纯文本格式。
如果您以后想要更改密码
git pull
会失败,因为密码不正确,然后git从~/.git-credentials
文件中删除有问题的用户+密码,因此现在重新运行
git pull
提供一个新密码,使其可以更早地工作。
您可以使用git config
启用git中的凭据存储。
git config --global credential.helper store
运行此命令时,第一次从远程存储库中拉出或推送时,系统会询问您用户名和密码。
之后,为了与远程存储库进行后续通信,您无需提供用户名和密码。
存储格式是.git-credentials
文件,以纯文本格式存储。
此外,您还可以将其他帮助程序用于git config credential.helper
,即内存缓存:
git config credential.helper cache <timeout>
这需要一个可选的timeout parameter
,确定凭据将在内存中保留多长时间。使用帮助程序,凭据将永远不会接触磁盘,并且在指定的超时后将被删除。该default
值是900 seconds (15 minutes).
警告:如果使用此方法,则您的git帐户密码将以plaintext
格式保存global .gitconfig file
,例如,在linux中将为/home/[username]/.gitconfig
如果您不希望这样做,ssh key
请改为使用。
git config credential.helper cache
密码将不会保存到文件中,只会存储在内存中。请参阅:git-scm.com/docs/git-credential-cache
推荐的安全方法:SSH
创建一个ssh Github密钥。转到github.com- >设置-> SSH和GPG密钥->新SSH密钥。现在将私钥保存到计算机。
然后,如果私钥在〜/ .ssh /目录中另存为id_rsa,我们将其添加为身份验证,如下所示:
ssh-add -K ~/.ssh/id_rsa
一种更安全的方法:缓存
我们可以使用git-credential-store在一段时间内缓存我们的用户名和密码。只需在CLI(终端或命令提示符)中输入以下内容:
git config --global credential.helper cache
您还可以这样设置超时时间(以秒为单位):
git config --global credential.helper 'cache --timeout=3600'
一种更不安全的方法
也可以使用Git-credential-store,但是这样将密码保存在磁盘上的纯文本文件中:
git config credential.helper store
过时的答案-快速又不安全
这是将密码以纯文本格式存储的不安全方法。如果有人控制了您的计算机,您的密码就会被泄露!
您可以这样设置用户名和密码:
git config --global user.name "your username"
git config --global user.password "your password"
在终端中,输入以下内容:
# Set git to use the credential memory cache
git config --global credential.helper cache
默认情况下,Git会将您的密码缓存15分钟。
要更改默认密码缓存超时,请输入以下内容:
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'
cache
用零件store
。因此,完整的命令将是:git config --global credential.helper store
。请注意,这会将您的密码存储在一个开放文本文件中(可以说没有任何加密)。
--timeout
参数的最大值是多少?
您可以编辑~/.gitconfig
到文件存储您的凭据
sudo nano ~/.gitconfig
哪个应该已经有
[user]
email = your@email.com
user = gitUSER
您应该在此文件的底部添加。
[credential]
helper = store
我之所以建议使用此选项,是因为它是全局的,如果您随时需要删除该选项,则知道该去哪里进行更改。
仅在个人计算机中使用此选项。
然后当你拉| 克隆| 输入您的git密码,通常,密码将以以下~/.git-credentials
格式保存
https://GITUSER:GITPASSWORD@DOMAIN.XXX
DOMAIN.XXX可能位于GITHUB.COM | BITBUCKET.ORG | 其他
查看文件
只需将您的凭据放在Url中,如下所示:
https://Username
:Password
@github.com/myRepoDir/myRepo.git
您可以这样存储它:
git remote add myrepo https://Userna...
... 使用它的示例:
git push myrepo master
现在就是列出 URL别名:
git remote -v
...以及删除其中之一的命令:
git remote rm myrepo
git@github.com:Username/myRepo.git
https
,不是ssh
,所以像这样的解决方案可能是有用的存在。还要注意,您可以使用oauth-token,这比GitHub密码安全得多。
对于全局设置,请从任何位置打开终端(运行):
git config --global user.name "your username"
git config --global user.password "your password"
这样,您在计算机上拥有的任何本地git repo都将使用该信息。
您可以通过以下操作为每个存储库分别进行配置:
运行以下命令:
git config user.name "your username"
git config user.password "your password"
它仅影响该文件夹(因为您的配置是本地的)。
--local
标签,但再次没有发生
您可以使用git-credential-store将未加密的密码存储在磁盘上,仅受文件系统权限的保护。
例
$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>
[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]
您可以检查文件中存储的凭据 ~/.git-credentials
有关更多信息,请访问 git-credential-store-帮助程序将凭据存储在磁盘上
如果使用SSH身份验证,则比使用用户名/密码身份验证更安全。
如果您使用的是Mac,则SSH客户端身份验证已集成到MacOS钥匙串中。创建SSH密钥后,在终端中输入:
ssh-add -K ~/.ssh/id_rsa
这会将SSH私钥添加到MacOS钥匙串中。git客户端连接到远程服务器时将使用ssh。只要您在服务器上注册了ssh公钥,就可以了。
SSH
访问权限,您将不会更加安全。使用HTTP身份验证,窃取凭据的人只能访问GitHub/GitLab
。令牌也被设计为具有有限的寿命。
在浏览了数十篇 SO帖子,博客等之后,我尝试了每种方法,这就是我想出的方法。它涵盖了一切。
这些都是您可以安全地验证git来克隆存储库的所有方式和工具,而无需交互式密码提示。
想要Just Works™吗?这是神奇的银弹。
获取您的访问令牌(如果需要Github或Gitea指令,请参阅备忘单中的部分),并将其设置在环境变量中(本地开发和部署都需要):
MY_GIT_TOKEN=xxxxxxxxxxxxxxxx
对于Github,逐字复制并运行以下行:
git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"
恭喜,现在无论使用https还是ssh url样式,任何自动克隆git存储库的工具都不会受到密码提示的阻碍。
不使用Github?
对于其他平台(Gitea,Github,Bitbucket),只需更改URL。请勿更改用户名(尽管是任意名称,但不同的配置条目需要它们)。
兼容性
这可以在MacOS,Linux,Windows(在Bash中),Docker,CircleCI,Heroku,Akkeris等本地运行。
更多信息
请参阅备忘单的“ .gitconfig代替Of”部分。
安全
请参阅备忘单的“安全性”部分。
git config --global credential."https://somegithost.com".username MyUserName
,它在您的备忘单中,但在此答案线程中没有其他地方。该特定解决方案不能回答OP的问题,但可以回答我的问题,所以谢谢!
上面的答案对我都不起作用。每当我想要fetch
或以下时,我都会不断获取以下内容pull
:
Enter passphrase for key '/Users/myusername/.ssh/id_rsa':
对于Mac
我可以通过以下方式阻止我询问密码:
vi ~/.ssh/config
UseKeychain yes
:wq!
对于Windows
我能够使用此stackexchange中的信息使其工作:https : //unix.stackexchange.com/a/12201/348665
除了编辑~/.gitconfig
文件,您还可以执行以下操作:
git config --local --edit
要么
git config --global --edit
git config --local user.name 'your username'
git config --local user.password 'your password'
要么
git config --global user.name 'your username'
git config --global user.password 'your password'
如果使用双引号,则用户名和密码可能会使用某些会破坏密码的字符。
--local
或--global
意味着为项目或os用户保存配置参数。
只是使用
git config --global credential.helper store
并执行git pull,它将询问用户名和密码,从现在开始,它将不提供任何提示输入用户名和密码,它将存储详细信息
.git-credentials
是您在运行时存储用户名和密码(访问令牌)的位置git config --global credential.helper store
,这是其他答案的建议,然后键入您的用户名和密码或访问令牌:
https://${username_or_access_token}:${password_or_access_token}@github.com
因此,为了保存用户名和密码(访问令牌):
git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials
这对于github机器人非常有用,例如,通过为不同分支制定规则来解决同一docker存储库中的Chain自动化构建,然后通过将其推送到post_push
docker hub的挂接器中来触发它。
一个例子可以在这里的stackoverflow中看到。
在完整地阅读了该主题并尝试了该问题的大多数答案之后,我最终找到了适合我的过程。我想分享它,以防有人不得不处理一个复杂的用例,但仍然不想像我一样浏览整个线程以及gitcredentials,gitcredentials-store等手册页。
在下面的步骤中找到我建议的程序,如果您(像我一样)必须使用几种不同的用户名/密码组合来处理来自多个提供商(GitLab,GitHub,Bitbucket等)的多个存储库。如果您只使用一个帐户,那么最好使用前面的答案中已经很好解释的git config --global credential.helper store
或git config --global user.name "your username"
等解决方案。
我的解决方案:
> git config --global --unset credentials.helper
> cd /path/to/my/repo
> git config --unset credential.helper
> git config credential.helper 'store --file ~/.git_repo_credentials'
注意:此命令在您的主目录中创建一个名为“ .git_repo_credentials”的新文件,Git将您的凭据存储在该文件中。如果您未指定文件名,则Git使用默认的“ .git_credentials”。在这种情况下,只需发出以下命令即可:
> git config credential.helper store
git config credential.*.username my_user_name
注意:如果您的存储库来自同一提供商(例如,GitLab),则通常可以使用“ *”。如果相反,您的存储库由不同的提供程序托管,则建议为每个存储库显式设置指向提供程序的链接,如以下示例(对于GitLab):
git config credential.https://gitlab.com.username my_user_name
此时,如果发出要求您提供凭据的命令(例如git pull
),将要求您输入与“ my_user_name”相对应的密码。这仅需要一次,因为git将凭据存储到“ .git_repo_credentials”,并在后续访问时自动使用相同的数据。
从rifrol的评论(在Linux Ubuntu上)到此答案,这是在Ubuntu中的方法:
sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
其他发行版提供了二进制文件,因此您无需构建它。
在OS X中,它通常是使用默认模块“ osxkeychain”“内置”的,因此您可以免费获得它。
查看官方git文档:
如果您使用SSH传输方式连接到远程服务器,则可以使用没有密码的密钥,从而无需输入用户名和密码即可安全地传输数据。但是,HTTP协议无法做到这一点–每个连接都需要用户名和密码。对于具有两因素身份验证的系统而言,这变得更加困难,在该系统中,您用于密码的令牌是随机生成的并且不会发音。
幸运的是,Git有一个凭证系统可以帮助您解决这一问题。Git框中提供了一些选项:
默认为完全不缓存。每个连接都会提示您输入用户名和密码。
“缓存”模式将凭据保留在内存中一定时间。没有密码存储在磁盘上,并且在15分钟后会从缓存中清除密码。
“存储”模式将凭据保存到磁盘上的纯文本文件中,并且它们永不过期。这意味着,除非您更改Git主机的密码,否则您将无需再次输入凭据。这种方法的缺点是您的密码以明文形式存储在主目录中的纯文件中。
如果您使用的是Mac,则Git带有“ osxkeychain”模式,该模式将凭据缓存在系统帐户附带的安全钥匙串中。此方法将凭据存储在磁盘上,并且永不过期,但是使用存储HTTPS证书和Safari自动填充的同一系统对其进行加密。
如果您使用的是Windows,则可以安装名为“ Git Credential Manager for Windows”的帮助程序。这类似于上述的“ osxkeychain”帮助程序,但是使用Windows凭据存储来控制敏感信息。可以在https://github.com/Microsoft/Git-Credential-Manager-for-Windows中找到它 。
您可以通过设置Git配置值来选择以下方法之一:
$ git config --global credential.helper cache
$ git config --global credential.helper store