如何让Git在推送到远程存储库时只询问密码

Eth*_*anZ 6 git proxy github username

要求可能很奇怪.但有时我真的需要这个功能.好的,这就是事情,我总是在代理之后工作.无论是在办公室我使用公司代理还是在家里我也使用VPN和代理(你知道,我在中国,所以我希望你能理解).

通常我使用git协议来连接github远程存储库,但是我很难在git协议后面设置代理,所以我决定用以下命令切换回http(s)

git remote set-url origin https://github.com/<username>/repo.git

git config http.proxy http://proxy:8080

它就像一个魅力.但是每当我连接到远程服务器时,git都会询问用户名密码,例如pull/push.

我只有一个github帐户,我想保存一些打字,所以问题是如何避免每次我想要推送时输入github用户名.我可以接受输入我的密码,但我不想输入用户名.怎么实现呢?

Mic*_*ina 16

存储密码

您可以使用以下命令告诉git存储您的凭据:

git config --global credential.helper store
Run Code Online (Sandbox Code Playgroud)

使用此方法,您只需输入一次用户名和密码,git将永远不再要求它.但请注意,您的密码将以明文形式存储,这在安全性方面并不是很好.

缓存密码

您也可以转而使用缓存,它会在会话中输入一次一段时间后存储您的密码.

git config --global credential.helper cache
Run Code Online (Sandbox Code Playgroud)

这样更安全,因为您的密码不会存储在磁盘上 - 只是暂时存储在内存中.如果您对默认值不满意,可以自己设置超时:

git config --global credential.helper 'cache --timeout=600'
Run Code Online (Sandbox Code Playgroud)

这再一次并不总是理想的.

SSH代理 - 理想的解决方案

你真正应该使用的是ssh推送和提取数据的协议.这将允许您使用私有ssh密钥对自己进行身份验证 - 这将由操作系统的已安装密钥代理进行处理.这应该与代理一起使用没有任何问题所以你一定要试一试.

您可以通过设置远程URL来进行设置,如下所示:

git remote set-url origin git@github.com:<username>/<project>.git
Run Code Online (Sandbox Code Playgroud)

如果您正在使用其他托管服务,如bitbucket,只需将"github.com"替换为您的提供商域名.

完成后,您需要设置公钥和私钥对,以便在github和您的计算机之间进行通信.有一个关于如何在这里设置它的非常好的教程.如果您使用的是Linux或MacOSX,则只需在运行命令时按照步骤操作即可ssh-keygen.

之后,您可以获得SSH代理来为您存储密码,这通常更安全.SSH代理通常要求您在打开计算机后输入密码一次 - 但之后它应该自动为您完成所有操作.与第一种以纯文本格式存储密码的解决方案不同,密码以这种方式安全存储.

您使用的SSH代理程序取决于您的操作系统,但设置起来应该不难.对于大多数流行的Linux发行版,您不需要做任何事情,我在下面的评论中被告知您可以按如下方式设置Windows:

git config --global credential.helper wincred
Run Code Online (Sandbox Code Playgroud)

我从来没有使用过MacOSX所以我无法确定这是否会像在基于Ubuntu的发行版中那样自动设置.

  • 不,这些凭证不会以纯文本形式存储,如果您不希望它们:请参阅[我自己的答案](http://stackoverflow.com/a/18673020/6309),以及[如何 - 待我写的东西](http://stackoverflow.com/a/18607931/6309) (2认同)

Von*_*onC 5

要完成Nevik评论,您可以更改现有仓库的网址:

git remote set-url origin https://<username>@github.com/<username>/repo.git 
Run Code Online (Sandbox Code Playgroud)

这将指定代理身份验证所需的用户名,您可以输入密码.

我个人使用凭证帮助程序(git1.8.3 +)将所有不同的凭据(GitHub,BitBucket,...)存储在加密%HOME%\_netrc.gpg(Windows)或~/.netrc.gpg(Unix _netrc)中,而不是迈克尔答案中描述的内存缓存凭证帮助程序.

有关详细信息,请参阅" 配置Git客户端,如GitHub for Windows,不要求身份验证 ".

不同之处是:

  • 使用内存缓存凭据帮助程序,您必须记住您的GitHub密码
  • 使用gpg netrc凭证助手,您只需记住您的gpg密码,即可获得所有不同的凭据.

另外,如果您激活了GitHub双因素身份验证,则无法再使用常规GitGub密码,但您需要一个"个人访问令牌",这是一个40长度的随机字符串.将此一次性存储在加密文件中的另一个原因,而不是每次会话必须输入一次.

我刚才描述的是https url,在我看来,它比ssh url更容易管理,你需要通过密码保护你的公共/私有ssh密钥,并且你需要在你的GitHub帐户上发布(一个不同的每个工作站,因为你不应该重用ssh键)