我从GitHub账户克隆了一个Git存储库到个人PC。 html
我想同时使用PC和笔记本电脑,但要使用一个GitHub账户。 git
当我尝试使用PC推送或从GitHub拉出时,它须要用户名和密码,但在使用笔记本电脑时则不须要! github
我不想每次与Origin交互时都输入用户名和密码。 我在这里想念什么? 缓存
我遇到了一样的问题,发现的最简单的解决方案是使用SSH URL而不是HTTPS: 安全
ssh://git@github.com/username/repo.git
而不是这样: bash
https://github.com/username/repo.git
如今,您能够仅使用SSH密钥而不是username
和password
。 服务器
除了更改成SSH以外,若是您不介意以明文形式输入密码,也能够继续使用HTTPS。 将其放在您的~/.netrc
,它不会询问您的用户名/密码(至少在Linux和Mac上如此): 网络
machine github.com login <user> password <password>
添加 (请参阅VonC的第二条注释):在Windows上,文件名为%HOME%\\_netrc
。 ssh
若是您想加密,还请阅读VonC的第一条评论。 socket
若是您拥有Git 1.7.10或更高版本,则可使用另外一个添加项 (请参阅user137717的注释)。
若是您要使用HTTPS克隆GitHub存储库,则可使用凭据帮助程序告诉Git每次与GitHub对话时都记住您的GitHub用户名和密码。
这也适用于Linux,Mac和Windows。
HTTPS更新:
GitHub为Windows启动了一个新程序,该程序能够在您使用HTTPS时存储您的凭据:
使用方法:
从这里下载程序
一旦运行该程序,它将编辑您的.gitconfig
文件。 若是其中有多个,请从新检查它是否编辑了正确的.gitconfig
。 若是没有正确编辑,请将如下内容添加到您的.gitconfig
[credential] helper = !'C:\\\\Path\\\\To\\\\Your\\\\Downloaded\\\\File\\\\git-credential-winstore.exe'
注意[credential]
以后的换行符。 它是必需的。
打开命令行客户端,而后尝试git push origin master
。 若是它要求您输入密码,请输入密码,而后您就能够经过了。 密码已保存!
若是您使用的是SSH,而且您的私钥已使用密码进行了加密,那么当您使用Git进行 push
, pull
和fetch
进行网络操做时 , 仍然会提示您输入私钥的密码/密码 。
若是您不想每次都输入密码,可使用ssh-agent
在每一个终端会话中存储一次私钥密码凭证,正如我在“ 没法打开与身份验证代理的链接”的回答中所解释的:
$ eval `ssh-agent -s` $ ssh-add
在Windows msysgit Bash中,您须要评估ssh-agent
的输出,可是我不肯定是否须要在其余开发环境和操做系统中执行相同的操做。
ssh-add
在您的home .ssh
文件夹中查找.ssh
id_rsa
,这是默认名称,可是您能够将文件路径传递给具备不一样名称的密钥。
完成终端会话后,可使用kill标志-k
关闭ssh-agent
:
$ ssh-agent -k
-k终止当前代理(由SSH_AGENT_PID环境变量提供)。
此外,它能够采用可选的超时参数,以下所示:
$ ssh-add -t <timeout>
其中<timeout>
的格式为<n>h
表示<n>
小时, <n>m
表示<n>
分钟,依此类推。
根据ssh-agent
手册 :
-t life为添加到代理中的身份的最大生存期设置默认值。 生存期能够以秒为单位或以sshd_config(5)中指定的时间格式指定。 使用ssh-add(1)为身份指定的生存期将覆盖此值。 若是没有此选项,则默认的最大生存期是永远的。
Cygwin用户应注意在Cygwin中使用ssh-agent的潜在安全风险 :
人们应该意识到Cygwin 1下ssh-agent的潜在危险,尽管在本地netstat和远程端口下,彷佛/ tmp / ssh-foo中指定的端口彷佛没法被任何人访问吗?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
并在引用的连接处 :
可是,请注意Cygwin的Unix域套接字基本上是不安全的 ,因此我强烈反对在Cygwin下的ssh-agent的用法。
当您在Cygwin下运行ssh-agent时,它将在
/tmp/ssh-$USERNAME/
目录中建立AF_UNIX套接字。 在Cygwin下,AF_UNIX套接字经过AF_INET套接字进行仿真。 若是您经过记事本查看/tmp/ssh-$USERNAME/agent-socket-*
文件,则能够轻松看到。 您会看到相似!<socket >2080而后运行
netstat -a
并感到惊讶! 您有一些程序正在监听端口2080。它是ssh-agent。 当ssh从服务器收到RSA质询时,它指的是/tmp/ssh-$USERNAME/agent-socket-*
(在Cygwin下,在本例中,这意味着它将打开与localhost:2080
链接)并询问ssh -agent使用它具备的私钥来处理RSA质询,而后将从ssh-agent收到的响应简单地传递到服务器。在Unix下,这种状况能够正常工做,由于在程序尝试访问AF_UNIX套接字时,Unix内核会检查权限。 可是,对于AF_INET套接字,链接是匿名的(请参阅“不安全”)。 想象一下,您正在运行Cygwin ssh代理。 恶意黑客可能会在您的包装箱中打开端口,找到ssh-agent使用的开放端口,打开与您的SSH服务器的链接,接收来自RSA服务器的RSA挑战,并经过他/她找到的开放端口将其发送到您的ssh-agent,并接收RSA响应,将其发送到SSH服务器,瞧,他/她已成功登陆到您的服务器。
资料来源: Setting Git
如下命令会将密码保存在内存中一段时间(对于Git 1.7.10或更高版本)。
$ git config --global credential.helper cache # Set git to use the credential memory cache $ git config --global credential.helper 'cache --timeout=3600' # Set the cache to timeout after one hour (setting is in seconds)