在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.gpg
encryption的文件。)
-
使用该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客户端软件。
使用凭证存储。
对于OSX和Linux上的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存储为纯文本(有点不安全,只是把它放到受保护的文件夹中)
就这样,正如本页所述:
我可能会有点慢,但是我不明白我需要先下载帮手! 我在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为在以下步骤中使用此不同的密钥:
- 编写一个包含
Host
,部署密钥的IdentityFile
,可能是UserKnownHostsFile
,也许是User
(尽pipe我认为你不需要它)的SSHconfiguration文件。 - 编写一个SSH封装shell脚本,实际上是
ssh -F /path/to/your/config $*
- 在正常的Git命令前
GIT_SSH=/path/to/your/wrapper
。 这里git remote
(origin)必须使用git@github.com:user/project.git
格式。
如果你像我一样使用双因素身份validation ,情况会有所不同。 由于我在其他地方找不到合适的答案,所以我会在这里贴一个,以便稍后我可以find答案。
如果您使用的是双因素身份validation,那么指定用户名/密码将不会起作用 – 您将拒绝访问。 但是,您可以使用应用程序访问令牌并使用Git的凭据助手为您caching。 这里是相关的链接:
- 设置命令行以使用双因素身份validation (search标题为“它如何为命令行Git?”的部分)
- 凭据caching
我不记得我在哪里看到这个,但是当你被要求input用户名时 – 这就是你粘贴应用程序访问令牌的地方。 然后将密码留空。 它在我的Mac上工作。
克隆repo
,您可以编辑repo/.git/config
并添加如下的configuration:
[user] name = you_name password = you_password [credential] helper = store
那么你将不会被要求再次username
和password
。
最好使用安全凭证,但是可以使用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