使用SSH方式连接Github

545 阅读2分钟

本文记录如何生成SSH密钥并将SSH密钥添加到Github账号下,使得能以SSH的方式从Github拉取和上传代码。

很久没有使用Github了,今天在push代码的时候报错没有权限:

$ git push
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights

于是按照Checking for existing SSH keys - GitHub Docs的步骤,重新设置了SSH密钥。

1. 查看是否已经有存在的密钥:

$ ls ~/.ssh

这里我只是看了一眼,不用很久之前创建好的密钥(id_rsa.pub)了,直接创建新的。

2. 生成新的SSH密钥

$ ssh-keygen -t ed25519 -C "your_email@example.com"

邮箱字符串的位置填自己的邮箱,按回车之后会提示输入内容,我全部按回车了,表示我会使用默认的~/.ssh文件目录存放密钥,以及不设置密钥的密码。

3. 在后台启动ssh-agent

$ ssh-agent -s

4. 修改配置文件

macOS Sierra 10.12.2及以上的版本需要修改一下~/.ssh/config文件。如果没有这个文件,就创建一个:

$ touch ~/.ssh/config

5. 在config文件中添加以下内容:

Host *
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_ed25519

如果在第2步选择了设置密钥的密码,那么config文件的内容应该是:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

6. 把SSH私钥添加到ssh-agent

$ ssh-add -K ~/.ssh/id_ed25519

7. 将SSH公钥复制到剪切板

$ pbcopy < ~/.ssh/id_ed25519.pub

8. 将公钥添加到Github

打开Github,按下图步骤添加公钥,其中Title的位置写对这个密钥的描述,Key的位置粘贴上第7步复制好的内容,点击“Add SSH key”之后,会要求输入密码,输入完密码点了确认之后就完成设置了。

2022-05-14-19-00-28-image.png

 

重新回到本地的代码仓库目录下,执行git push能正常把代码push到仓库了。

更新Github的host key

(2023-04-27)又好久没有使用github, 今天push的时候,又报错了:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.

Please contact your system administrator.

Add correct host key in /Users/renmo/.ssh/known_hosts to get rid of this message.

Offending RSA key in /Users/renmo/.ssh/known_hosts:2

Host key for github.com has changed and you have requested strict checking.

Host key verification failed.

fatal: 无法读取远程仓库。

  


请确认您有正确的访问权限并且仓库存在。

根据这篇文档的内容,执行以下指令更新host key后,重新执行git push即可。

ssh-keygen -R github.com