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

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

使用Git 1.7.9及更高版本

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

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

 git config --global credential.helper cache 

…它告诉Git保持密码caching在内存中(默认)15分钟。 您可以设置更长的超时时间 :

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

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

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来包含密码。

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

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

您可以通过以下方式为您的远程设备设置一个新的URL:

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

确保你使用https ,你应该知道,如果你这样做,你的GitHub密码将被存储在你的.git目录的明文中,这显然是不可取的。

有了任何Git版本(当然,从版本0.99开始)

另一种方法是把你的用户名和密码放在你的~/.netrc文件中,但是如同把密码保存在远程URL一样,这意味着你的密码将以纯文本的forms存储在磁盘上,不build议。 但是,如果你想采取这种方法,请将以下行添加到~/.netrc

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

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

 chmod 600 ~/.netrc 

请注意,在Windows上,这个文件应该被称为_netrc ,您可能需要定义%HOME%环境variables – 更多详细信息请参阅:

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

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

 git config credential.helper store 

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

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

 git config --unset credential.helper 

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

 git config --global credential.helper store 

TLDR; 使用Git 1.8.3+encryption的netrc文件

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

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

解决scheme :使用GPG(GNU Privacy Guard)encryption该文件,并在每次需要密码(用于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:\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 ,所以你需要复制它。)

  • 创build或导入GPG密钥,并相信它:

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

(确保将密码input到该密钥。)

  • 相信那个关键

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

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

(是的,这是一个Bash脚本,但它将在Windows上工作,因为它将被Git调用。)

  • 以明文forms创build一个_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)。

  • encryption该文件:

     gpg -e -r a_recipient _netrc 

(您现在可以删除 _netrc文件,只保留_netrc.gpgencryption的文件。)

  • 使用该encryption文件:

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

(请注意' / ': C:\path\to...根本不起作用。)(您可以先使用-v -d来查看正在进行的操作。)

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

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

在HTTPSurl中存储用户凭据的方式很老套:

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

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

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

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

使用凭证存储。

对于OSXLinux上的git 2.11+, 使用git内置的凭证存储 :

 git config --global credential.helper libsecret 

对于Windows上的msysgit 1.7.9+:

 git config --global credential.helper wincred 

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

 git config --global credential.helper osxkeychain 

你可以使用

 git config credential.helper store 

当你下次input密码的时候,通过拉或者推,它将以.git-credentials的forms存储为纯文本(有点不安全,只是把它放到受保护的文件夹中)

就这样,正如本页所述:

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

我可能会有点慢,但是我不明白我需要先下载帮手! 我在Atlassian的Git仓库中find了credential.helper下载,希望它有帮助。

引用:

如果要在OSX上使用Git进行凭证caching,请执行以下步骤:

下载二进制git-credential-osxkeychain。

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

 chmod a+x git-credential-osxkeychain 

把它放在/ usr / local / bin目录下。

运行下面的命令:

 git config --global credential.helper osxkeychain 

在GNU / Linux设置上,一个〜/ .netrc也可以工作得很好:

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

这可能取决于Git使用哪个networking库进行HTTPS传输。

只需将login凭据包含在URL中:

 git remote rm origin git remote add origin https://username:mypassword@github.com/path/to/repo.git 

对于Windows,您可以使用Git Credential Manager (GCM)插件。 它目前由Microsoft维护。 好的是,它将密码保存在Windows Credential Store中,而不是纯文本。

项目的发布页面上有一个安装程序。 这也将安装与内置的凭证pipe理器的正式版本的git-for-windows 。 它允许github(和其他服务器)的双重身份validation。 并有一个graphics界面,最初login。

对于cygwin用户(或者已经使用官方的git-for-windows的用户),你可能更喜欢手动安装。 从发布页面下载zip包。 解压缩包然后运行install.cmd 。 这将安装到你的~/bin文件夹。 (确保你的~/bin目录在PATH中。)然后用下面的命令configuration它:

 git config --global credential.helper manager 

然后, git-credential-manager.exe在对任何服务器进行身份validation时将运行git-credential-manager.exe

如果你不想像Mark说的那样用明文存储你的密码,你可以使用一个不同的github URL进行提取,而不是像推送那样。 在您的configuration文件中,在[remote "origin"]

 url = git://github.com/you/projectName.git pushurl = git@github.com:you/projectName.git 

当你推送的时候,它仍然会要求input密码,但是当你提取的时候,至less对于开源项目来说不会。

您可以使用凭据助手。

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

其中x是秒数。

OAuth的

您可以创build自己的个人API令牌 ( OAuth ),并以与使用普通凭据相同的方式使用它(位于: /settings/tokens )。 例如:

 git remote add fork https://4UTHT0KEN@github.com/foo/bar git push fork 

.netrc

另一种方法是使用~/.netrc (Windows上的_netrc )configuration你的用户/密码,例如

 machine github.com login USERNAME password PASSWORD 

对于https:

 machine github.com login USERNAME password PASSWORD protocol https 

证书助手

要使用HTTPS 在Git中cachingGitHub密码 ,可以使用凭证助手告诉Git每次与GitHub交谈时记住您的GitHub用户名和密码。

  • Mac: git config --global credential.helper osxkeychain (需要osxkeychain helper ),
  • Windows: git config --global credential.helper wincred
  • Linux和其他: git config --global credential.helper cache

有关:

  • 如何在Linuxterminal钥匙串中存储您的GitHub https密码?
  • 我如何确保Git不要求我提供我的GitHub用户名和密码?
  • configurationGit客户端,比如GitHub for Windows,不要求authentication
  • 把一个本地仓库推向一个具有双因素authentication的GitHub仓库

应使用身份validation令牌代替帐户密码。 转到GitHub设置/应用程序,然后创build一个个人访问令牌。 令牌可以像使用密码一样使用。

令牌旨在允许用户不使用帐户密码进行项目工作。 在进行pipe理工作时只使用密码,如创build新的令牌或撤销旧的令牌。


代替授予用户对GitHub帐户的完整访问权限的令牌或密码,可以使用项目特定的部署密钥来授予对单个项目存储库的访问权限。 当您仍然可以使用您的普通证书访问其他Git帐户或项目时,可以将Git项目configuration为在以下步骤中使用此不同的密钥:

  1. 编写一个包含Host ,部署密钥的IdentityFile ,可能是UserKnownHostsFile ,也许是User (尽pipe我认为你不需要它)的SSHconfiguration文件。
  2. 编写一个SSH封装shell脚本,实际上是ssh -F /path/to/your/config $*
  3. 在正常的Git命令前GIT_SSH=/path/to/your/wrapper 。 这里git remote (origin)必须使用git@github.com:user/project.git格式。

如果你像我一样使用双因素身份validation ,情况会有所不同。 由于我在其他地方找不到合适的答案,所以我会在这里贴一个,以便稍后我可以find答案。

如果您使用的是双因素身份validation,那么指定用户名/密码将不会起作用 – 您将拒绝访问。 但是,您可以使用应用程序访问令牌并使用Gi​​t的凭据助手为您caching。 这里是相关的链接:

  • 设置命令行以使用双因素身份validation (search标题为“它如何为命令行Git?”的部分)
  • 凭据caching

我不记得我在哪里看到这个,但是当你被要求input用户名时 – 这就是你粘贴应用程序访问令牌的地方。 然后将密码留空。 它在我的Mac上工作。

克隆repo ,您可以编辑repo/.git/config并添加如下的configuration:

 [user] name = you_name password = you_password [credential] helper = store 

那么你将不会被要求再次usernamepassword

最好使用安全凭证,但是可以使用caching保留一段时间

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

您的凭证将被保存3600秒。

我从gitcredentials(7)手册页得到我的答案。 在我的情况下,我的Windows安装中没有证书caching; 我使用凭证存储。

在使用凭证存储之后,用户名/密码存储在[user folder] /。git-credentials文件中。 要删除用户名/密码,只需删除文件的内容。

这适用于我我正在使用Windows 10

 git config --global credential.helper wincred 

我知道这不是一个安全的解决scheme,但有时你只需要一个简单的解决scheme – 没有安装任何东西。 而且由于helper = store对我不起作用,所以我创build了一个虚拟助手:

创build一个脚本放在你的用户bin文件夹中,这里命名为credfake ,这个脚本将提供你的用户名和密码:

 #!/bin/bash while read line do echo "$line" done < "/dev/stdin" echo username=mahuser echo password=MahSecret12345 

使其可执行:

 chmod u+x /home/mahuser/bin/credfake 

然后在git中configuration它:

 git config --global credential.helper /home/mahuser/bin/credfake 

(或使用它没有 – 全球唯一回购)

和 – voilá – git将使用这个用户名+密码。

composer php文档提到 ,你可以阻止它使用GitHub API,所以它的行为就像git clone

如果在GitHub存储库上将no-api关键字设置为true ,它将像使用任何其他Git存储库一样克隆存储库,而不是使用GitHub API。 但是,与直接使用git驱动程序不同的是,composer仍然会尝试使用GitHub的zip文件。

所以这个部分看起来像这样:

 "repositories": [ { "type": "vcs", "no-api": true, "url": "https://github.com/your/repo" } ], 

请记住,API是有原因的。 所以这应该是github.com上增加负载的最后一种方法。

您还可以编辑bashrc文件并在其中添加一个脚本。 这会要求你的密码,当你启动git一次,然后记住,直到你注销。

 SSH_ENV=$HOME/.ssh/environment # start the ssh-agent function start_agent {    echo "Initializing new SSH agent..."    # spawn ssh-agent    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"    echo succeeded    chmod 600 "${SSH_ENV}"    . "${SSH_ENV}" > /dev/null    /usr/bin/ssh-add } if [ -f "${SSH_ENV}" ]; then    . "${SSH_ENV}" > /dev/null  ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {      start_agent;  } else    start_agent; fi