git切换账户产生push失败的问题解决

由于在sclab2中我不慎将原有仓库删除,因此不得不重新申请账户创建新的仓库,然而进行push会出现错误提示:

Permission denied (publickey)

本博客是为了解决此问题的

前置知识:

1.

首先我们需要了解什么是SSH,关于这部分可以参考网页:

https://zh.wikipedia.org/zh-cn/SSH

简单来说,SSH是一种安全协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

有以下两种模式

第一种级别(基于口令的安全验证):
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证):
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

2.

我们知道,我们第一次在github进行推送代码时,我们需要输入账号与密码。

但是在后来的代码上传中,并不需要此步骤,这是由于github采取了SHH密钥的形式

在电脑中生成了唯一的SSH公钥与私钥,而github上也有一个公钥,当进行push的时候,

git会自动匹配看你电脑上的秘钥与github上的是否是配对的,如果是配对的,则允许推送。

问题分析:

有了前置的知识后,并且基于错误提示:

Permission denied (publickey)

 我们很容易就可以猜测出问题出现的原因,是由于缺少公钥引起的

因此我们需要在github上与自己电脑上创建相同的密钥就可以解决这个问题了

具体的解决问题方法:

cd ~/.ssh
ls

打开命令行(或者git bash),可以使用如上指令查看是否有不会出现三个文件夹:

id_rsa.pub,config,known_hosts

如果出现如上三个文件夹,就说明本地已经有了密钥

如果只出现了一个known_hosts文件夹,则需要生成密钥

生成密匙的命令是:

ssh-keygen -t rsa -C "xxxxxx@xxx.com"

其中引号内容改为自己的邮箱

一路回车,就可以生成密匙了

这是会发现已经生成了id_rsa.pub

(若是已有密匙,可以忽略以上生成步骤)

接下来查看id_rsa.pub的内容并复制

进入到个人github账户的settings,然后点击New SSH key,把刚刚复制的内容粘贴。

接下来就发现可以使用

git push指令上传代码了

原文地址:https://www.cnblogs.com/masteryellow/p/8746232.html