问题描述
Github 从 2021 年 8 月 13 日开始就禁止使用账号密码的形式进行验证了,所以最近每次 git 提交代码都会收到邮件通知。之前一直懒没管,想着一直用 https 没啥问题,就没什么迁移的动力。但半年后就要禁止了,保险起见最近还是抽空完成了迁移,其中遇到了一些坑,写到这里希望能帮到遇到相同问题的人。
https 迁移到 ssh
github 有两种认证手段,一种是 https 的账号密码认证,每次认证都需要输入密码(当然也可以通过 manager 去缓存,但是有一定安全风险),另一种则是 ssh,基于非对称加密的认证。前者安全性低,且不方便;后者更加方便,安全性也更高,所以切换到 ssh 也是有好处的。迁移的过程主要有以下几步:
- 检查远程仓库的链接到底是 https 还是 ssh,这个和当时 git clone 下来的方式有关系。命令行输入
git remote -v
就能看到相关信息,如果是以https
开头的说明当前是 https 模式,如果是git@github.com
开头的,说明当前是 ssh 模式。 - 如果是 https 模式,需要切换至 ssh。输入命令
git remote set-url origin {ssh-url}
,后面的部分填写仓库的 ssh 地址。比如我的博客地址:git@github.com:leungyukshing/leungyukshing.github.iio.git
- 输入完后,再次输入
git remote -v
,此时如果远程仓库的 url 已经更改,说明修改成功。
使用 ssh 连接 github
在完成上面部分的切换后,当我们去 pull 或 push 代码时,与 github 的认证就会走 ssh,但是需要完成整个认证过程,还需要在本机生成密钥。有如下几个步骤:
检查本机是否有 ssh 的公钥和私钥。
1
2$ cd ~/.ssh
$ ls检查是否存在此目录,如果存在,则说明本机已经生成密钥了;
如果本机没有密钥,则生成一份新的。
1
$ ssh-keygen -t rsa -C "your_email@example.com"
文件会默认生成放在上面的目录中,一般来说会有两个文件
id_rsa
和id_rsa.pub
。然后登陆 Github 的网页,在个人的 Settings 中找到 SSH and GPG Keys 选项,向里面添加新的 SSH Key,title 随便写,然后把上面生成的
id_rsa.pub
文件的内容完全复制到输入框中,点击保存;在网页上保存后,在本机执行命令验证 ssh 密钥是否校验正常。
1
$ ssh -T git@github.com
如果校验成功,会提示:Hi username! You’ve successfully authenticated, but GitHub does not provide shell access. 这个时候说明你的 ssh 已经可以和 github 连接上并正常使用了。
SSH 中文路径问题
如果你的系统是 Linux 或者 MacOS,那么这一部分的问题相信你不会遇到,只有非常坑爹的 Windows 才会碰到这种问题。
如果你使用的是 Windows 系统而且你的用户名设置了中文,那么在你使用命令行的进行上面一部分操作时,你的密钥会一直无法生成,这是因为路径中包含了中文字符。此时最快捷的解决方法是,使用 git 自带的 bash,在里面创建密钥。创建完之后,后续使用正常的命令行即可。