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

时间:2013-09-07 11:22:50

标签: git github proxy username

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:16)

存储密码

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

git config --global credential.helper store

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

缓存密码

您也可以选择缓存,这会在您在会话中输入一次密码后存储密码。

git config --global credential.helper cache

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

git config --global credential.helper 'cache --timeout=600'

再一次,这并不总是理想的。

SSH代理 - 理想的解决方案

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

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

git remote set-url origin git@github.com:<username>/<project>.git

如果您正在使用其他托管服务,例如bitbucket,请更换&#34; github.com&#34;与您的提供商域名。

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

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

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

git config --global credential.helper wincred

我从未使用过MacOSX,所以我无法确定这是否会像在基于Ubuntu的发行版中一样自动设置。

答案 1 :(得分:5)

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

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

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

我个人使用%HOME%\_netrc.gpg凭据帮助程序(git1)将所有不同的凭据(GitHub,BitBucket,...)存储在加密的~/.netrc.gpg(Windows)或_netrc(Unix)中.8.3+),而不是Michael&#39; answer中描述的内存缓存凭据帮助器。

详见&#34; Configure Git clients, like GitHub for Windows, to not ask for authentication&#34;。

区别在于:

  • 使用内存缓存凭据帮助程序,您必须记住您的GitHub密码
  • 使用gpg netrc凭据帮助程序,您只需要记住您的gpg密码,所有您的不同凭据。

另外,如果您激活GitHub two-factor authentication,则无法再使用常规GitGub密码,但您需要一个&#34;个人访问令牌&#34;,这是一个40长度的随机字符串。在加密文件中一劳永逸地存储它的另一个原因,而不是每次会话必须输入一次。

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

答案 2 :(得分:4)

这是一个简单的解决方案 为了节省一些打字,你可以轻松地在git bash中使用以下步骤..

(1)创建远程存储库

git remote add origin https://{your_username}:{your_password}@github.com/{your_username}/repo.git

注意:如果您的密码包含'@'符号,请使用'%40'代替

(2)然后使用远程存储库执行任何操作

ex:- git push origin master