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

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


使用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并使用Homebrew安装Git,则可以使用本机Mac OS X密钥存储库:

git config --global credential.helper osxkeychain

对于Windows,有一个名为Git Credential Manager for Windows的助手,或者是msysgit中的wincred。

git config --global credential.helper wincred # obsolete

Git for Windows 2.7.3+(2016年3月):

git config --global credential.helper manager

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

使用1.7.9之前的Git版本

使用1.7.9之前版本的Git,这个更安全的选项不可用,并且您需要更改origin远程站点使用此URL包含密码的URL:

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

换句话说:password用户名后面和@之前的:password

您可以设置一个新的URL为您的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%环境变量 - 有关更多详细信息,请参阅:

  • Git - 如何在Windows上使用.netrc文件来保存用户和密码

  • 您也可以让Git使用以下方式永久存储您的凭证:

    git config credential.helper store
    

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

    如果您希望Git在每次需要连接到远程存储库时都继续询问您的凭据,则可以运行以下命令:

    git config --unset credential.helper
    

    要将.git-credentials中的密码存储在%HOME%目录中而不是项目目录中,请使用--global标志

    git config --global credential.helper store
    

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

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

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

    解决方案 :使用GPG(GNU Privacy Guard)加密该文件,并在每次需要密码(用于push / pull / fetch / clone操作)时使Git对其进行解密。


    Windows的分步说明

    使用Windows:

    (Git在其发行gpg.exe中有一个gpg.exe ,但使用完整的GPG安装包括一个gpg-agent.exe ,它将记住与您的GPG密钥关联的密码短语。)

  • 安装gpg4Win Lite ,最小的gnupg命令行界面(采用最新的gpg4win-vanilla-2.XY-betaZZ.exe ),并用GPG安装目录完成PATH:

    set PATH=%PATH%:C:pathtogpg
    copy C:pathtogpggpg2.exe C:pathtogpggpg.exe
    
  • (注意' copy '命令:Git需要一个Bash脚本来执行命令' gpg '。由于gpg4win-vanilla-2带有gpg2.exe ,所以你需要复制它。)

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

    gpgp --import aKey
    # or
    gpg --gen-key
    
  • (确保将密码输入到该密钥。)

  • 相信那个关键

  • 将凭证助手脚本安装到%PATH%中的目录中:

    cd c:afodlerinyourpath
    curl -o c:prgsbingit-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:pathto...根本不起作用。)(您可以先使用-v -d来查看正在发生的事情。)

    从现在起,任何使用需要身份验证的HTTP(S)URL的Git命令都会解密该_netrc.gpg文件并使用与您正在联系的服务器关联的登录名/密码。 第一次,GPG会要求您提供您的GPG密钥的密码,以解密文件。 其他时候,第一个GPG呼叫自动启动的gpg代理将为您提供该密码。

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

    链接地址: http://www.djcxy.com/p/3759.html

    上一篇: Is there a way to skip password typing when using https:// on GitHub?

    下一篇: Creating an API for mobile applications