题 在GitHub上使用https://时有没有办法跳过密码输入?


我最近切换到将我的存储库同步到GitHub上的https://(由于防火墙问题),并且每次都要求输入密码。曾经是我有一个 SSH 证书,这就够了。在我的情况下有没有办法绕过密码(使用http / https)?


1623
2018-03-17 17:47


起源


也可以看看 superuser.com/questions/199507/... - Colonel Panic
您现在可以使用凭证帮助程序来加密 _netrc 包含您的凭据的文件。看到 我的答案如下。我觉得那更安全了 git-credential-winstore.exe (内存缓存)在Windows上有点儿麻烦。 - VonC
也可以看看 Git push需要用户名和密码 和 Git一直提示我输入密码。
git-credential-winstore 最适合Windows。什么是马车?设置ssh是首选选项,虽然我已经多次完成,但它更容易出错,当你必须连接到多个主机时,有时只是普通不起作用。 - Bron Davies
通过“SSH证书”我假设你的意思是“SSH私钥”。 - Michael Mior


答案:


使用Git 1.7.9及更高版本

自Git 1.7.9(2012年1月下旬发布)以来,Git中有一个简洁的机制,可以避免一直为HTTP / HTTPS输入密码,称为 凭证助手。 (谢谢 dazonic 在下面的评论中指出这个新功能。)

使用Git 1.7.9或更高版本,您可以使用以下凭证助手之一:

git config --global credential.helper cache

...告诉Git将密码缓存在内存中(默认情况下)为15分钟。您可以使用以下设置更长的超时:

git config --global credential.helper "cache --timeout=3600"

(这个例子是在 适用于Linux的GitHub帮助页面。)如果需要,您也可以永久存储您的凭证,请参阅下面的其他答案。

GitHub的帮助 也暗示 如果您使用的是Mac OS X并且已经使用过 家酿 要安装Git,您可以使用本机Mac OS X密钥库:

git config --global credential.helper osxkeychain

对于Windows,有一个名为的帮助器 适用于Windows的Git Credential Manager 要么 在msysgit中wincred

git config --global credential.helper wincred # obsolete

适用于Windows 2.7.3+的Git (2016年3月):

git config --global credential.helper manager

对于Linux,你可以 使用 gnome-keyring(或其他密钥环实现,如KWallet)。

随着1.7.9之前的Git版本

对于1.7.9之前的Git版本,这个更安全的选项不可用,您需要更改您的URL origin 远程用于以这种方式包含密码:

https://you:password@github.com/you/example.git

......换句话说 :password 在用户名和之前 @

您可以为自己设置新的网址 origin 远程:

git config remote.origin.url https://you:password@github.com/you/example.git

确保使用 https 你应该知道,如果你这样做,你的GitHub密码将以纯文本形式存储在你的 .git 目录,这显然是不受欢迎的。

任何Git版本(好,从版本0.99)

另一种方法是将您的用户名和密码放在您的 ~/.netrc 但是,与将密码保存在远程URL中一样,这意味着您的密码将以纯文本形式存储在磁盘上,因此不太安全,不建议使用。但是,如果您想采用这种方法,请将以下行添加到您的 ~/.netrc

machine <hostname> login <username> password <password>

......替换 <hostname> 使用服务器的主机名,和 <username> 和 <password> 用你的用户名和密码。还记得在该文件上设置限制性文件系统权限:

chmod 600 ~/.netrc

请注意,在Windows上,应该调用此文件 _netrc,您可能需要定义%HOME%环境变量 - 有关更多详细信息,请参阅:


2136
2018-03-17 17:54



不要以纯文本格式存储密码。从Git 1.7.9开始,您可以使用凭证助手。 git config --global credential.helper osxkeychain在OS X上。对于其他操作系统,请参阅 help.github.com/articles/set-up-git - dazonic
FWIW,osx钥匙串的东西是基础GIT源代码的一部分,它不是Brew或MacPorts的独家组件,也不是本月的味道。而你甚至不需要从头开始构建git - 只需cd contrib / credential / osxkeychain /并运行make。 - synthesizerpatel
使用双因素身份验证,您必须使用github调用的内容 人员访问令牌。实际上,您应该始终使用一个,因为与密码不同,您可以控制它提供的访问权限。只需更换网址中的密码即可 https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git。它使存储在磁盘上的纯文本密码几乎足够安全。 - Russell Stuart
git config --global credential.helper cache 在Windows上不起作用: stackoverflow.com/questions/11693074/... 使用 gitcredentialstore 在Windows上快乐 - Sebastian J.
有什么方法可以将此超时设置为无穷大? - sudo


您还可以让Git使用以下内容永久存储您的凭据:

git config credential.helper store

注意:虽然这很方便,但Git会以明文形式存储您的凭据 项目目录下的本地文件(.git-credentials)(请参阅下面的“home”目录)。如果您不喜欢这样,请删除此文件并切换到使用 缓存选项。

如果你希望Git在需要的时候继续向你询问凭据 连接到远程存储库,您可以运行此命令:

git config --unset credential.helper

存储密码 .git-credentials 在你的 %HOME% 目录而不是项目目录:使用 --global 旗

git config --global credential.helper store

639
2017-09-03 01:14



在Windows上,您可以下载帮助程序实用程序来配置在Windows Creditial Store中存储加密版GIT密码的内容,请参阅 confluence.atlassian.com/display/STASH/... - Contango
我发现我必须指定--global或它会尝试将设置存储在当前存储库中: git config --global credential.helper store - Brian Gordon
为什么要进行缓存而不是永久存储?共享电脑什么的? - Michael J. Calkins
@BrianGordon我在Windows上使用GIT 1.9.5,和 --global 国旗是多余的。即使没有此标志,也会创建凭证文件 %USER_HOME% 目录。 - jFrenetic
如果不以纯文本形式存储,它受保护的是什么?你的密码?当你连接到git时,它不会要求你输入管理员密码吗?是不是必须输入密码才能获得另一个有点奇怪的密码? - Cruncher


TLDR;用一个 使用Git 1.8.3+加密的netrc文件

保存Git存储库的密码可以通过以下方式使用HTTPS URL ~/.netrc (Unix)或 %HOME%/_netrc (注意 _)在Windows上。

:该文件将以纯文本格式存储您的密码。

:使用加密该文件 GPG(GNU Privacy Guard),并且每次需要密码时让Git解密它(for push/pull/fetch/clone 操作)。


注意:使用Git 2.18(2018年第二季度),您现在可以自定义用于解密加密的GPG .netrc 文件。

看到 提交786ef50提交f07eeed (2018年5月12日) 路易斯马萨诺(``)
(合并 Junio C Hamano - gitster  -  在 提交017b7c5,2018年5月30日) 

git-credential-netrc:接受 gpg 选项

git-credential-netrc 被硬编码用'解密'gpg' 不管   gpg.program选项。
  这是像Debian这样的分布上的一个问题,它将现代GnuPG称为其他东西,比如'gpg2


Windows的分步说明

使用Windows:

(Git有一个 gpg.exe 在其分发中,但使用完整的GPG安装包括 gpg-agent.exe,它会记住与你的GPG密钥相关的密码。)

  • 安装 gpg4Win Lite,最小的gnupg命令行界面(取 最近的 gpg4win-vanilla-2.X.Y-betaZZ.exe),并使用GPG安装目录完成您的PATH:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
    

(注意'copy'命令:Git需要一个Bash脚本来执行命令'gpg”。以来 gpg4win-vanilla-2 附带 gpg2.exe,你需要复制它。)

  • 创建或导入GPG密钥,并信任它:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(确保将密码加到该密钥上。)

  • 相信这个关键

  • 将凭证帮助程序脚本安装在您的目录中 %PATH%

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
    

(是的,这是一个Bash脚本,但它可以在Windows上运行,因为它将由Git调用。)

  • 以明文形式创建_netrc文件

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(别忘了'protocol'部分:'http' 要么 'https'取决于您将使用的URL。)

  • 加密该文件:

    gpg -e -r a_recipient _netrc
    

(你现在可以 删除 该 _netrc 文件,只保留 _netrc.gpg 加密的。)

  • 使用该加密文件:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(注意'/“: C:\path\to... 根本不会工作。)(你可以先使用 -v -d 看看发生了什么。)

从现在开始,任何使用需要身份验证的HTTP(S)URL的Git命令都会对其进行解密 _netrc.gpg文件并使用与您联系的服务器关联的登录名/密码。 第一次,GPG会要求您提供GPG密钥的密码,以解密该文件。 其他时候,gpg-agent 自动启动 通过第一次GPG通话将为您提供该密码。

这样,你就可以记住 一些 URL /登录/密码在一个文件中,并将其存储在磁盘上加密。
我发现它比“缓存”助手更方便“,你需要记住并为每个远程服务键入(每个会话一次)一个不同的密码,以便将所述密码缓存在内存中。


85
2017-08-21 15:48



在linux上尝试相同的事情.. git config --local credential.helper“netrc -f /home/me/.netrc.gpg -v -d”..我得到“git:'credential-netrc'不是git命令。参见'git --help'“ - sunny
@sunny那是什么的 curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc 适用于:你需要复制 git-credential-netrc 你路上的任何地方($PATH),为了让git能够调用'credential-netrc”。 - VonC
谢谢你错过了。 - sunny
好吧, _netrc 对我不起作用 Windows 7 PC,但是 .netrc 为**工作 YouTube的-DL 随着 --netrc 争论传递给它。 - Iulian Onofrei
最好的解决方案,应该在顶部。 - Doug713705


有一种简单,老式的方法可以在HTTPS URL中存储用户凭据:

https://user:password@github.com/...

您可以使用更改URL git remote set-url <remote-repo> <URL>

这种方法的明显缺点是您必须以纯文本格式存储密码。您仍然可以输入用户名(https://user@github.com/...这将至少为你节省一半的麻烦。

您可能更喜欢切换到SSH或使用GitHub客户端软件。


32
2018-01-06 16:43



用户名/密码可能需要编码,请参阅 stackoverflow.com/a/34611311/3906760 - MrTux


使用凭证存储。

对于git 2.11+ OSX 和 Linux的使用git内置的凭证存储

git config --global credential.helper libsecret

对于msysgit 1.7.9+ 视窗

git config --global credential.helper wincred

对于OS X上的Git 1.7.9+使用:

git config --global credential.helper osxkeychain

30
2017-09-09 03:57



我确信这是要走的路,但我遗憾地得到一个错误: git: 'credential-gnome-keyring' is not a git command. See 'git --help'. - codepleb
谢谢,但我得到了同样的错误。难道我做错了什么?我输入命令,没有任何反应。我一推,就被要求提供我成功插入的凭据,但是我得到了错误,这样做之后就不是git命令了。 - codepleb
在libsecret在Linux上运行之前,您需要执行以下步骤: stackoverflow.com/a/40312117/775800 - Lavamantis
另一件事 - 如果你在Github上启用了2FA,你的密码将无效。但您可以在Github“设置”页面上创建个人访问令牌,该令牌可用作您的密码。 github.com/github/hub/issues/822 - Lavamantis
credential-libsecret'不是git命令 - Siddharth


你可以使用

git config credential.helper store

当您下次使用拉或推输入密码时,它将被存储 .git-credentials为纯文本(有点不安全,但只是把它放到受保护的文件夹中)

就是这样,如本页所述:

https://git-scm.com/docs/git-credential-store


30
2017-09-21 13:03



对于Git for Windows 2.7.3(2016年3月): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1那就是 git config credential.helper manager 代替 - VonC
这是我认为实际回答OP问题的答案 - Climax


我可能有点慢,但对我来说,我不需要首先下载帮助器!我找到了credential.helper下载 Atlassian使用Git存储库进行永久性身份验证, 希望能帮助到你。

引用:

如果要在OSX上使用带有凭据缓存的Git,请执行以下步骤:

下载二进制git-credential-osxkeychain。

运行以下命令以确保二进制文件是可执行的:

chmod a+x git-credential-osxkeychain

将它放在目录/ usr / local / bin中。

运行以下命令:

git config --global credential.helper osxkeychain

18
2017-10-05 05:31





在GNU / Linux设置上,〜/ .netrc也能很好地工作:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

它可能取决于Git使用的网络库 HTTPS 运输。


18
2017-12-05 13:28



一定要确保 chmod 0600 ~/.netrc。 - poolie
只想在这里留下一个链接 Ubuntu netrc联机帮助页。我需要为另一个用户(/home/git/.netrc)创建它,然后将所有权更改为该用户。 - zacharydl