我从我的GitHub帐户克隆了一个Git存储库到我的电脑。
我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。
当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!
我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?
我从我的GitHub帐户克隆了一个Git存储库到我的电脑。
我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。
当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!
我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?
当前回答
对我有用的是编辑.git/config并使用
[remote "origin"]
url = https://<login>:<password>@gitlab.com(...).git
不用说,这是一种不安全的密码存储方式,但在某些环境/情况下,这可能不是问题。
其他回答
对于Mac OS
转到您的Github设置->开发者设置->Github中的个人访问令牌页面(https://github.com/settings/tokens/new),并生成具有所有Repo权限的新令牌在mac上搜索Keychain Access->搜索github.com->单击Show password,然后粘贴刚才复制的令牌。转到CLI,它将再次询问用户名和密码,输入您的Github用户名并将令牌粘贴为密码,您应该可以继续使用CLI。
这就是对我有用的:
git remote set-url origin https://username@github.com/username/reponame.git
例子:
git remote set-url origin https://jsmith@github.com/jsmith/master.git
来源:设置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)
截至2021,HTTPS远程有一个安全、用户友好的跨平台解决方案。不再输入密码!不再有SSH密钥!不再有个人访问令牌!
安装GitHub开发的Git凭据管理器(下载)。它支持对GitHub、BitBucket、Azure和GitLab的无密码浏览器内OAuth认证。这意味着您可以在GitHub和其他平台上启用双因素身份验证,大大提高了帐户的安全性。
推送时,您可以选择身份验证方法:
> git push
Select an authentication method for 'https://github.com/':
1. Web browser (default)
2. Device code
3. Personal access token
option (enter for default): 1
info: please complete authentication in your browser...
在Linux上,需要一点点设置。以下内容将凭据缓存在内存中20小时,因此您每天最多只能进行一次身份验证。
git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions "--timeout 72000"
熟悉gnomekeyring或KWallet的高级用户可能更喜欢将凭证存储更改为libsecret。
外观配置(文档):
首选在终端而不是GUI中选择身份验证方法(点击次数较少)始终使用浏览器方法,而不是每次都被询问(甚至更少的按键)
git config --global credential.guiPrompt false
git config --global credential.gitHubAuthModes browser
如果您使用的是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服务器,瞧,他/她成功地以您的身份登录到您的服务器。