我知道,我回答得很晚,甚至StackOverflow也证实了我是否真的想回答。我之所以要回答,是因为没有人实际描述过实际问题,因此想分享相同的内容。
基础
首先,了解这里的遥控器是什么。Remote是GitLab,您的系统是本地系统,因此当我们谈论remote时origin
,您在git remote -v
输出中设置的任何URL 都是您的Remote URL。
协议
基本上,Git克隆/推/拉主要用于两种不同的协议(也有其他协议)-
- HTTP协议
- SSH协议
当您克隆存储库(或更改远程URL)并使用HTTPs URL(例如https://gitlab.com/wizpanda/backend-app.git)时,它将使用第一个协议,即HTTP协议。
如果您克隆存储库(或更改远程URL)并使用类似的URL,git@gitlab.com:wizpanda/backend-app.git
则它将使用SSH协议。
HTTP协议
在此协议中,每个远程操作(例如克隆,推入和拉出)都使用简单的身份验证(即远程用户名和密码,在本例中为GitLab),这意味着对于每个操作,您都必须输入您的用户名和密码,这可能很麻烦。
因此,当您推/拉/克隆时,GitLab / GitHub将使用您的用户名和密码对您进行身份验证,并允许您执行操作。
如果要尝试此操作,可以通过运行命令切换到HTTP URL git remote set-url origin <http-git-url>
。
为避免这种情况,可以使用SSH协议。
SSH协议
简单的SSH连接适用于公私钥对。因此,在您的情况下,由于您正在使用SSH URL进行通信,因此GitLab无法对您进行身份验证。现在,GitLab必须以某种方式了解您。为此,您必须创建一个公钥-私钥对并将公钥提供给GitLab。
现在,当您使用GitLab进行推/拉/克隆时,默认情况下,GIT(内部SSH)将向GitLab提供您的私钥并确认您的身份,然后GitLab将允许您执行操作。
因此,我将不再重复穆罕默德已经给出的步骤,而在理论上将重复它们。
- 生成密钥对`ssh-keygen -t rsa -b 2048 -C“我的通用SSH密钥”
- 默认情况下,生成的密钥对将使用
~/.ssh
命名的id_rsa.pub
(公共密钥)和id_rsa
(私有密钥)。
- 您会将公共密钥存储到您的GitLab帐户(同一密钥可用于多个或任何服务器/帐户)。
- 克隆/推/拉时,GIT提供您的私钥。
- GitLab将私钥与您的公钥进行匹配,并允许您执行。
提示
您应该始终创建至少2048个字节的强rsa密钥。因此命令可以是ssh-keygen -t rsa -b 2048
。
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
一般思想
两种方法各有利弊。键入上面的文本后,我去搜索了更多关于此的内容,因为我从未阅读过有关此的内容。
我找到了这个官方文档https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols,其中提供了更多有关此内容的信息。我的意思是,通过阅读错误并针对错误进行思考,您可以做出自己的理论或理解,然后可以与一些Google结果相匹配来解决此问题:)
ssh -vvvv git@gitlab.com
以查看是否获取了SSH密钥