【Git操作】给GitHub添加SSH密钥
这次用git命令往GitHub仓库push的时候,Windows10自带的OpenSSH让我输入GitHub账号密码了,并且报错如下:
1 | remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. |
翻译过来就是:
remote:对密码身份验证的支持已于 2021 年 8 月 13 日移除。请改用个人访问令牌。
远程:请参阅 https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ 了解更多信息。
查看了GitHub相关官网,官网显示:
在 2020 年 7 月,我们宣布打算要求对所有经过身份验证的 Git 操作使用基于令牌的身份验证(例如,个人访问、OAuth 或 GitHub 应用安装令牌)。从 2021 年 8 月 13 日开始,在对 GitHub.com 进行 Git 操作进行身份验证时,我们将不再接受帐户密码。
也就是说以后用git命令往GitHub上操作的时候不支持使用GitHub账号密码验证了。这个GitHub真是折腾,烦死了……
如何使用 Personal Access Token 的方法可以自行搜索教程或查看官方文档:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
不想使用 Token 的方法也可以通过 SSH key 的方式进行连接,方法如下:
进入本机秘钥文件夹:
1
cd ~/.ssh
查看是否有
id_rsa
和id_rsa.pub
文件(我之前部署服务器的时候电脑生成过):1
ls
可以参考GitHub Docs官方文档:https://docs.github.com/cn/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
如果没有
id_rsa
和id_rsa.pub
,输入下方命令,然后回车三次即可生成:1
ssh-keygen -t rsa -C "xxxxx@xx.com"
注意:这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。初衷仅仅是为了便于辨识,不用邮箱也可以。
如果有
id_rsa
和id_rsa.pub
,就获取公钥内容id_rsa.pub
:1
cat id_rsa.pub
全选并右键copy所有字符
打开并登录GitHub账号,点击头像设置
settings
,选择SSH and keys
,新建SSH公钥,输入标题和刚刚复制的那坨内容,选择添加。这时你注册GitHub账号的邮箱会收到添加成功的提醒邮件。接下来测试SSH连接,终端输入:
1
ssh -T git@github.com
可能会看到类似如下的警告:
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹中的一个:
SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 (RSA)
SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM (ECDSA)
SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU (Ed25519)
如果是,则输入 yes
并回车。
生成的消息中包含你的GitHub用户名,表示连接成功:
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi Barry-Flynn! You've successfully authenticated, but GitHub does not provide shell access.
别忘了修改本地仓库设置中的远程仓库地址协议,
比如从https://github.com/用户名/仓库名.git
修改成git@github.com:用户名/仓库名.git
否则即便是我们刚刚弄了SSH密钥还是 push
不上去。
【其他问题】(1):
往仓库执行hexo d
命令上传部署的时候出现了如下报错:
fatal: unable to access 'https://github.com/用户名/仓库地址/': OpenSSL SSL_read: Connection was reset, errno 10054
搜索了一下解决方法,有的说执行一下下面这个命令再上传就行了:
1 | git config --global http.sslVerify "false" |
但我查找了一下以前的博客笔记,之前也遇到过,应该是中国防火墙网络原因。多执行几次碰碰运气就行了。
这个墙啊真的是……哎……不说了。
【其他问题】(2):
往GitHub上推的时候遇到了下面的报错:
1 | remote: error: GH007: Your push would publish a private email address. |
去GitHub账号的 setting 里把 Emails 选项里的Keep my email addresses private
取消勾选就行了,让邮箱取消私密并公开。
【其他问题】(3):
本来想推送到GitHub仓库默认的main
分支,结果push错了推到了master
分支,导致该仓库新建了个master分支……卧槽我怎么这么惨,啥都能让我碰上!!!
怎么办,删分支!
浏览器打开GitHub的仓库地址,点击“切换分支的按钮”右边的N branches
(N是你这个仓库的分支数),然后就可以看到每个分支右边的垃圾桶(删除按钮)了。
【其他想说的】:
呜呜呜~当自己不知所措走进死胡同里的时候,有一些群友帮着你一块解决问题的感觉真是太棒啦,他们的很多话有时候真的是让你醍醐灌顶,一语惊醒梦中人。
没有他们的帮助,我还在死磕这个GitHub连接的问题呢,最后发现就只是忘了把本地仓库设置中的远程仓库地址从https
换成git
了,真是又气又想笑……