目录
问题
在Git bash操作时,不断提示登录,使用账号密码登录失败,但是密码正确。命令行可能会出现提示 "remote: Support for password authentication was removed..."
原因
Github对于所有需要身份验证的 Git 操作都不支持使用账号密码进行身份验证,而是使用基于令牌的身份验证。详情见:https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/
针对于Git bash(命令行),常用的我们可以使用基于HTTPS协议或者SSH协议进行身份验证。
基于HTTPS协议
1. 创建token令牌
参见官方文档,有图文讲解:Creating a personal access token - GitHub Docs
2. 重新设置远程仓库地址
查看远程仓库地址
git remote -v
origin https://github.com/passerbyYSQ/mybatis-ysq.git (fetch)
origin https://github.com/passerbyYSQ/mybatis-ysq.git (push)
重新设置远程仓库地址,在地址中植入第1步生成的token
git remote set-url origin https://<token>@github.com/<用户名>/<仓库名>.git
例如:
git remote set-url origin https://ghp_8VJ3hW...@github.com/passerbyYSQ/mybatis-ysq.git
如果出现类似以下报错:
fatal: unable to access 'https://github.com/passerbyYSQ/mybatis-ysq.git/': OpenSSL SSL_read: Connection was reset, errno 10054
则执行下面命令后重试
git config --global http.sslVerify "false"
基于SSH协议
1. 检查系统中是否已存在SSH keys
ls -al ~/.ssh
注意:
(1)在Windows中,下面命令需要在Git bash(安装Git的时候顺带安装上)中输入,否则普通cmd是识别不了ls这个Linux命令的
(2)在Linux中"~"代指当前用户的家目录,在Windows中也是如此。比如当前是Administrator用户,那么"~"的实际路径一般就是:C:\Users\Administrator
(3)如果存在SSH keys,会类似如下图所示。否则 ".ssh" 目录为空甚至不存在
2. 生成新的SSH keys
仍然是在Git bash中,输入以下命令
ssh-keygen -t ed25519 -C "<你的电子邮箱或者其他描述信息>"
例如:ssh-keygen -t ed25519 -C "xxx@qq.com"
期间会提示你 SSH keys的保存路径 和 生成SSH keys用到的随机盐,直接回车就行了。看保存路径,你会发现,会保存在第1步中说的当前用户的家目录的.ssh目录下
3. 将SSH keys的公钥添加到你的Github账户
https://github.com/settings/ssh/new
点击上述链接,将第2步生产的以 ".pub" 结尾的文件内容复制出来,粘贴到上述链接的文本框中保存。
4. 测试SSH链接
依旧是在Git bash中,输入下述命令。中途可能会提示你是否信任Github主机,直接输入yes表示信任并建立连接,出现如图表示成功。
ssh -T git@github.com
如果出现以下报错,就是私钥文件(上图中的 id_ed25519 文件)的权限太宽泛了。在Win10系统下,需要设置此私钥的文件的权限。
PS C:\vm\share_vm> ssh -i .\id_rsa root@192.168.56.101
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '.\\id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key ".\\id_rsa": bad permissions
root@192.168.56.101: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
- 禁用权限继承
- 设置成只有当前系统用户完全控制,其他权限删除掉
- 重新测试链接,就会出现上图的成功提示了
详情参考:真正解决 windows OpenSSH WARNING: UNPROTECTED PRIVATE KEY FILE!_coder_jo的博客-CSDN博客
5. 重新设置远程仓库地址
# 查看远程仓库
git remote -v
# 更新远程仓库地址
git remote set-url origin git@github.com:<用户名>/<仓库名>.git
这个时候,你对远程仓库操作,就不需要通过输入密码或者token建立连接并进行身份认证了,而是通过SSH加密方式进行安全通信。
关于SSH的原理,自己没有总结过,也是一知半解,必要单独总结一篇文章。TODO!!!