这次用git命令往GitHub仓库push的时候,Windows10自带的OpenSSH让我输入GitHub账号密码了,并且报错如下:

1
2
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.

翻译过来就是:

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_rsaid_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_rsaid_rsa.pub,输入下方命令,然后回车三次即可生成:

    1
    ssh-keygen -t rsa -C "xxxxx@xx.com"

    注意:这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。初衷仅仅是为了便于辨识,不用邮箱也可以。

  • 如果有id_rsaid_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
2
3
remote: error: GH007: Your push would publish a private email address.
remote: You can make your email public or disable this protection by visiting:
remote: http://github.com/settings/emails

去GitHub账号的 setting 里把 Emails 选项里的Keep my email addresses private取消勾选就行了,让邮箱取消私密并公开。


【其他问题】(3):

本来想推送到GitHub仓库默认的main分支,结果push错了推到了master分支,导致该仓库新建了个master分支……卧槽我怎么这么惨,啥都能让我碰上!!!

怎么办,删分支!

浏览器打开GitHub的仓库地址,点击“切换分支的按钮”右边的N branches(N是你这个仓库的分支数),然后就可以看到每个分支右边的垃圾桶(删除按钮)了。


【其他想说的】:

呜呜呜~当自己不知所措走进死胡同里的时候,有一些群友帮着你一块解决问题的感觉真是太棒啦,他们的很多话有时候真的是让你醍醐灌顶,一语惊醒梦中人。

没有他们的帮助,我还在死磕这个GitHub连接的问题呢,最后发现就只是忘了把本地仓库设置中的远程仓库地址从https换成git了,真是又气又想笑……