Git Push需要用户名和密码

风流意气都作罢 提交于 2020-01-06 14:25:49

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我从GitHub帐户克隆了一个Git存储库到我的PC。

我想同时使用PC和笔记本电脑,但要使用一个GitHub帐户。

当我尝试使用PC推送或从GitHub拉出时,它需要用户名和密码,但在使用笔记本电脑时则不需要!

我不想每次与Origin交互时都输入用户名和密码。 我在这里想念什么?


#1楼

我遇到了同样的问题,发现的最简单的解决方案是使用SSH URL而不是HTTPS:

ssh://git@github.com/username/repo.git

而不是这样:

https://github.com/username/repo.git

现在,您可以使用SSH密钥而不是usernamepassword


#2楼

除了更改为SSH之外,如果您不介意以明文形式输入密码,也可以继续使用HTTPS。 将其放在您的~/.netrc ,它不会询问您的用户名/密码(至少在Linux和Mac上如此):

machine github.com
       login <user>
       password <password>

添加 (请参阅VonC的第二条注释):在Windows上,文件名为%HOME%\\_netrc

如果您想加密,还请阅读VonC的第一条评论。

如果您拥有Git 1.7.10或更高版本,则可以使用另一个添加项 (请参阅user137717的注释)。

使用凭证助手将GitHub密码缓存在Git中

如果您要使用HTTPS克隆GitHub存储库,则可以使用凭据帮助程序告诉Git每次与GitHub对话时都记住您的GitHub用户名和密码。

这也适用于Linux,Mac和Windows。


#3楼

HTTPS更新:

GitHub为Windows启动了一个新程序,该程序可以在您使用HTTPS时存储您的凭据:

使用方法:

  • 这里下载程序

  • 一旦运行该程序,它将编辑您的.gitconfig文件。 如果其中有多个,请重新检查它是否编辑了正确的.gitconfig 。 如果没有正确编辑,请将以下内容添加到您的.gitconfig

    [credential] helper = !'C:\\\\Path\\\\To\\\\Your\\\\Downloaded\\\\File\\\\git-credential-winstore.exe'

    注意[credential]之后的换行符。 它是必需的。

  • 打开命令行客户端,然后尝试git push origin master 。 如果它要求您输入密码,请输入密码,然后您就可以通过了。 密码已保存!


#4楼

如果您使用的是SSH,并且您的私钥已使用密码进行了加密,那么当您使用Git进行 pushpullfetch 进行网络操作时仍然会提示您输入私钥的密码/密码

使用ssh-agent保存私钥密码/密码凭证

如果您不想每次都输入密码,可以使用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

ssh-agent手册中所述

-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用户应注意在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服务器,瞧,他/她已成功登录到您的服务器。


#5楼

资料来源: 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)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!