当我尝试推送到一个我通过HTTPS协议克隆下来的仓库时,它告诉我输入我的用户名和密码,然后立即出现错误
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/pavelkomarov/repo.git/'
字符串
首先,* 为什么git客户端问我用户名和密码,然后才告诉我“对不起,我不再接受这些了,嘻嘻”?
第二,是否有一种方法可以使用HTTPS进行推送?我只让push
在SSH上工作。你必须深入到git配置中并在其中添加某种键,还是真的没有路径可以实现这一点?如果是前者,我怎么会觉得是后者呢?
第三,当SSH功能更强大时,为什么默认使用HTTPS?对我来说,这是一个Why do we even have that lever!?"的例子。他们只是不希望所有用户都必须创建和添加SSH密钥,而希望超级用户能够弄清楚吗?但老实说,我的整个团队似乎无论如何都要做这些步骤!
实际上,它们可以归结为没有那么多:
cd ~/.ssh && ssh-keygen
后接cat id_rsa.pub | pbcopy
1.在网站上导航到用户设置-> SSH和GPG密钥->添加密钥按钮->粘贴->绿色按钮完成
1.确保您使用的是git remote set-url origin git@github.com:user-name/repo-name.git
的SSH协议
这很简单,可以在客户端的错误消息中描述,或者至少可以在错误消息引导用户的web文章中作为顶部项目。
在过去的几年里,我已经多次遇到这种荒谬的事情,因为老实说,我并没有经常在新机器上设置git来记住所有这些步骤,并且围绕这一点的文档过于冗长,并且没有指导您执行最小可行的操作集来启用push
。
3条答案
按热度按时间vlf7wbxs1#
首先,为什么git客户端问我用户名和密码,然后告诉我“对不起,我不再接受这些了,嘻嘻”?
当您克隆它时,存储库的远程最初设置为HTTPS,此后您没有更改URL。因此,git要求HTTPS授权细节,试图联系GitHub,GitHub说“不能再使用这些了”。
第二,是否有一种方法可以使用HTTPS进行推送?你必须深入到git配置中并在其中添加某种键,还是真的没有路径可以实现这一点?如果是前者,我怎么会觉得是后者呢?
错误消息中的链接会告诉您如何执行此操作。
当您在命令行上使用HTTPS URL将
git clone
、git fetch
、git pull
或git push
发送到远程存储库时,Git将询问您的GitHub用户名和密码。**当Git提示您输入密码时,请输入您的个人访问令牌。**或者,您可以使用凭证助手,如Git Credential Manager。Git的基于密码的身份验证已经被删除,取而代之的是更安全的身份验证方法。有关详细信息,请参阅“Managing your personal access tokens”。当你看到“管理你的个人访问令牌”时,你会发现关于如何创建你的个人访问令牌的非常清晰的说明,无论是细粒度的还是经典的(所有访问)令牌。
第三,为什么在SSH功能更强大的情况下默认使用HTTPS
因为你就是这么复制的。(或者,您后来将URL更改为HTTPS URL,尽管我认为这不太可能。)如果您使用SSH URL克隆它,则将通过SSH进行推送。
但老实说,我的整个团队似乎无论如何都要做这些步骤!事实上,它们可以归结为
如果它不是那么多,那么它应该很容易,对吧?
e0uiprwp2#
我在ssh中配置了
git config --global url.github:.insteadof https://github.com/
和github
,就这么简单,从我的桌面上的~/.ssh/config
上的一个片段(物理上是安全的,所以我只是保持会话正常):字符串
~/.config/git/config
:型
kcrjzv8t3#
如何使用HTTPS推送
好的,谢谢你们的帮助。a way to push via HTTP:
1.在GitHub网站上通过Profile -> settings -> developers setting -> personal access tokens创建一个Personal Access Token,根据需要勾选多个系统访问框并选择适当的到期日期。
1.将密钥复制到剪贴板。
1.在克隆存储库时,将令牌作为
git clone https://<username>:<githubtoken>@github.com/<username>/<repositoryname>.git
添加到url,或者如果您已经克隆了它,则将上游url设置为git remote set-url origin https://<githubtoken>@github.com/<username>/<repositoryname>.git
您也可以忽略在上述URL中的令牌,然后,当提示输入用户名和密码时,给予您的标准用户名和访问令牌作为密码,然后推送通过。
还有一种方法可以将访问令牌放在系统密钥链中,但我不能完全弄清楚这一点。我的猜测是,如果配置正确,那么当终端要求输入git密码(实际上应该是一个访问令牌)时,系统会提示您输入指纹或系统密码。
这在功能上与设置SSH密钥相同,因此步骤非常相似。
设计评论
我仍然认为这是不幸的复杂。
事实上,这里有多种可能的协议,这意味着用户的选择增加了一倍,要维护的文档增加了一倍,潜在的指令交叉混淆,要在后端维护的代码增加了一倍。也许真的有这样的情况,你想使用一个或另一个协议,比如从防火墙后面,如果SSH流量出于某种原因不允许,但它违反了设计原则,“应该有一个-最好只有一个-明显的方式来做。
设置访问令牌或SSH密钥需要一些计算机安全知识。您几乎需要一个UML图来描绘所涉及的系统和责任,并且您需要知道密码被停止使用的传说。我在某个地方看到了一个声明,因为客户端可能会以明文形式将密码发送到服务器,但这似乎是可疑的:所有有能力的客户端都应该在将密码发送到互联网之前进行一些哈希运算,这样下游的人就看不到明文了。也许GitHub想从单因素升级安全性,密钥实现了这一点?为了方便起见,我会给予一些安全性,但我理解强迫用户使用程序,这样就不会有任何东西溜走。但如果这是政策,设置说明必须非常明确,老实说,我不认为他们是。
事实上,为了起步,我必须通读几个冗长的how-to页面和stackoverflow帖子,收集上下文信息,以了解我在做什么。一旦我把所有这些都放在一起,写几个命令肯定很容易,但我的观点是要做到这一点很复杂。在错误消息链接的页面应该有最小可行的步骤,如上面,前面和中心,解释如下,没有绒毛。
这些年来,周期性的延误给我带来了真实的的头痛。这是一个关闭。每一次我的眼睛呆滞了,我蒙混过关,挫折硬化成故意无知,为什么这一切都应该是必要的。既然我已经问了这个问题,并详细调查了,我会记住,或者至少可以回来参考。但为了新来者和其他归来的老来者,它真的可以做得更直观。