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

我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。

当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!

我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?


当前回答

块引用

如果您在请求用户名和密码时遇到$git推送代码问题,请执行以下步骤:

Login to your profile.
Go to settings

click developer settings
->Personal access tokens
--> note: access token
--->Select scopes: checkbox on repo
----> Generate token
-----> Make sure to copy and store it safely if you intend to reuse it.

*** use the generated token as password during pushing code for next 30days ***

***HAPPY CODING***

其他回答

如果您使用的是SSH,并且您的私钥是用密码短语加密的,那么在使用Git进行推送、拉取等网络操作时,仍会提示您输入私钥的密码短语/密码。

使用ssh代理保存私钥密码/密码凭据

如果您想避免每次都输入密码,可以使用ssh代理在每个终端会话中存储一次私钥密码凭据,正如我在回答“无法打开与身份验证代理的连接”时所解释的:

$ eval `ssh-agent -s`
$ ssh-add

在WindowsmsysgitBash中,您需要评估ssh代理的输出,但我不确定是否需要在其他开发环境和操作系统中执行同样的操作。

ssh-add在您的home.ssh文件夹中查找名为idrsa的私钥,这是默认名称,但您可以将文件路径传递给具有不同名称的密钥。

杀死特工

完成终端会话后,可以使用kill标志-k关闭ssh代理:

$ ssh-agent -k

如ssh代理手册中所述:

-克终止当前代理(由SSH_agent_PID环境变量给定)。

可选超时

此外,它可以采用一个可选的超时参数,如下所示:

$ ssh-add -t <timeout>

其中<timeout>的格式为<n>h表示<n>小时,<n>m表示<n<分钟,依此类推。

根据ssh代理手册:

-t寿命设置添加到代理的标识的最大生存期的默认值。可以以秒或sshdconfig(5)中指定的时间格式。使用ssh-add(1)为标识指定的生存期将覆盖此值。如果没有此选项,默认的最长生存期为永久。

有关更多时间格式,请参阅本页。

Cygwin用户的安全警告

Cygwin用户应该意识到在Cygwin中使用ssh代理存在潜在的安全风险:

人们应该认识到Cygwin 1下ssh代理的潜在危险,尽管在本地netstat和远程portscan下,似乎任何人都无法访问/tmp/ssh-foo中指定的端口。。。?[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

在引用的链接中:

然而,请注意Cygwin的Unix域套接字是基本上不安全的,因此我强烈发现Cygwin下ssh代理的使用。当您在Cygwin下运行ssh代理时,它会在/tmp/ssh-$USERNAME/目录中创建AF_UNIX套接字。在Cygwin下,AF_UNIX套接字通过AF_INET套接字进行模拟。如果您通过记事本查看/tmp/ssh-$USERNAME/agent-socket-*文件,您可以很容易地看到这一点。你会看到类似的东西!<插座>2080然后运行netstat-a并惊喜!您有一些程序正在侦听端口2080。这是ssh代理。当ssh从服务器接收到RSA质询时,它会引用相应的/tmp/ssh-$USERNAME/agent socket-*(在本例中是在Cygwin下,这意味着它将打开到localhost:2080的连接),并要求ssh代理使用其拥有的私钥来处理RSA质询,然后简单地将从ssh代理接收到的响应传递给服务器。在Unix下,这样的场景运行起来没有问题,因为当程序试图访问AF_Unix套接字时,Unix内核会检查权限。然而,对于AF_INET套接字,连接是匿名的(读取“不安全”)。想象一下,您正在运行Cygwin ssh代理。恶意黑客可能会对您的设备进行端口扫描,找到ssh代理使用的开放端口,打开与ssh服务器的连接,从中接收RSA质询,通过他/她找到的开放端口将其发送给ssh代理,接收RSA响应,将其发送到ssh服务器,瞧,他/她成功地以您的身份登录到您的服务器。

如果SSH密钥或.netrc文件不适用于您,那么另一个简单但不太安全的解决方案可能适用于您:git credential store-Helper将凭据存储在磁盘上:

git config --global credential.helper store

默认情况下,凭据将保存在文件~/.git凭据中。它将被创建并写入。

请注意,使用此助手将在磁盘上存储未加密的密码,仅受文件系统权限的保护。如果这可能不是可接受的安全权衡。

对我有用的是编辑.git/config并使用

[remote "origin"]
        url = https://<login>:<password>@gitlab.com(...).git

不用说,这是一种不安全的密码存储方式,但在某些环境/情况下,这可能不是问题。

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

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

而不是这样:

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

现在,您可以只使用SSH密钥而不是用户名和密码进行验证。

对于Mac OS

转到您的Github设置->开发者设置->Github中的个人访问令牌页面(https://github.com/settings/tokens/new),并生成具有所有Repo权限的新令牌在mac上搜索Keychain Access->搜索github.com->单击Show password,然后粘贴刚才复制的令牌。转到CLI,它将再次询问用户名和密码,输入您的Github用户名并将令牌粘贴为密码,您应该可以继续使用CLI。