【github】Support for password authentication was removed on August 13,2021.

本文指导如何在GitHub鉴权失败后,通过创建个人访问令牌或使用SSH密钥进行身份验证,包括详细步骤和常见问题解决方案,适用于开发者和GitHub用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

github提交代码,提示鉴权失败,如下图:

也就是说,从2021年8月13日起,密码验证的git操作方式不再支持,需要使用基于令牌的身份验证模式进行git操作。官网说明请看这里

解决方法

目前根据访问GitHub 仓库的方式有不同的身份验证模式:

  • 用户名和密码
  • 个人访问令牌(PAT)
  • SSH密钥

对于开发来说,身份验证模式可采用 个人访问令牌 或者 SSH密钥。

个人访问令牌

首先到自己的Github账户创建令牌,详细步骤如下:官网说明请看这里

  1. 在任何页面的右上角,单击您的个人资料照片,然后单击 Settings(设置)

  2. 在左侧边栏中,单击 Developer settings

  3. 在左侧边栏中,单击 Personal access tokens(个人访问令牌)

  4. 单击 Generate new token(生成新令牌)

  5. 填写好令牌相关信息,比如令牌名称(note),有效时限(Expiration),令牌的作用域或权限(scopes)等,点击Generate token(生成令牌)

下面是官网令牌选择权限的图片。

为了省心,我干脆全选了(😄)。

  1. 保存好生成的令牌字符串。


  2. 用令牌替换之前的密码即可正常访问github代码仓库。

$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token(区别就是之前这里填写的是github仓库密码,现在填写令牌)

正常访问到仓库后,系统会自动在钥匙串(mac)或者 管理Windows凭据(window)中生成登录凭证:

可能说的轻松,但实际操作中还是遇到了困难——提交代码报443错误:
fatal: 无法访问 'https://github.com/*****/******.git':LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

折腾了半天,最终参考这篇文章,解决了问题。方法如下:

git config --global --add remote.origin.proxy "127.0.0.1:(科学上网端口)"

笔者科学上网获取端口截图如下:


SSH密钥

使用 SSH 连接到 GitHub 官方教程

Secure Shell(SSH) (可理解为一种加密的网络协议) 连接到 GitHub ,原理大概如图:

生成密钥对

如上所示,我们需要ssh密钥对:公钥和私钥。 密钥对是跟github账户关联的,所以我们需要针对github账户生成ssh密钥对:

$ ssh-keygen -t ed25519 -C "github邮箱账户"

相关说明:
-t 指定密钥算法,其值有: dsa | ecdsa | ed25519 | rsa(default), 和官网一样这里指定为ed25519。
-C 描述文字,比如邮箱。验证了下,可随意填写

回车后会让你输入密钥对的名称,直接默认回车(如果自定义名称会导致找不到密钥,导致Permission denied (publickey),ssh-agent可解决)。

接着会让你输入密码来保护你的密钥,为了避免每次输入密码(ssh-agent可以解决这个问题),直接回车。

如果电脑本地存在.ssh目录,那么就会在执行指令的目录下生成密钥对。否则会创建.ssh文件夹并在其内生成密钥对。

将公钥添加到github

将生成的公钥id_ed25519.pub用文本编辑器打开,复制其内容添加到github,步骤:Settings ➡️ SSH and GPG keys 选择New SSH key, 添加成功后如下图:

验证是否配置成功
$ ssh -T git@github.com

回车后会让你检查GitHub 的 SSH 密钥指纹,直接输入yes即可。
如果出现如下所示,则配置成功。

Hi <GitHub账户名>! You've successfully authenticated, but GitHub does not provide shell access.

更改仓库的地址为SSH地址,验证是否可正常git操作:

这里有些同学或许会有个疑问,如果我有多个代码仓库在不同平台(github, gitee, gitlab, coding等),SSH密钥该如何管理与使用?这里就需要用到SSH密钥管理器:ssh-agent,有兴趣的同学可自行谷歌探索。

以上是我对问题的学习心得,感谢大家的阅读~



参考文章:
生成新的SSH密钥并添加到GitHub账户
ssh-agent详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hepingdev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值