本文记录如何生成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”之后,会要求输入密码,输入完密码点了确认之后就完成设置了。
重新回到本地的代码仓库目录下,执行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