Halo

A magic place for coding

0%

Github 连接从 https 迁移至 ssh

问题描述

  Github 从 2021 年 8 月 13 日开始就禁止使用账号密码的形式进行验证了,所以最近每次 git 提交代码都会收到邮件通知。之前一直懒没管,想着一直用 https 没啥问题,就没什么迁移的动力。但半年后就要禁止了,保险起见最近还是抽空完成了迁移,其中遇到了一些坑,写到这里希望能帮到遇到相同问题的人。


https 迁移到 ssh

  github 有两种认证手段,一种是 https 的账号密码认证,每次认证都需要输入密码(当然也可以通过 manager 去缓存,但是有一定安全风险),另一种则是 ssh,基于非对称加密的认证。前者安全性低,且不方便;后者更加方便,安全性也更高,所以切换到 ssh 也是有好处的。迁移的过程主要有以下几步:

  1. 检查远程仓库的链接到底是 https 还是 ssh,这个和当时 git clone 下来的方式有关系。命令行输入 git remote -v 就能看到相关信息,如果是以 https 开头的说明当前是 https 模式,如果是 git@github.com 开头的,说明当前是 ssh 模式。
  2. 如果是 https 模式,需要切换至 ssh。输入命令 git remote set-url origin {ssh-url},后面的部分填写仓库的 ssh 地址。比如我的博客地址:git@github.com:leungyukshing/leungyukshing.github.iio.git
  3. 输入完后,再次输入 git remote -v,此时如果远程仓库的 url 已经更改,说明修改成功。

使用 ssh 连接 github

   在完成上面部分的切换后,当我们去 pull 或 push 代码时,与 github 的认证就会走 ssh,但是需要完成整个认证过程,还需要在本机生成密钥。有如下几个步骤:

  1. 检查本机是否有 ssh 的公钥和私钥。

    1
    2
    $ cd ~/.ssh
    $ ls

    检查是否存在此目录,如果存在,则说明本机已经生成密钥了;

  2. 如果本机没有密钥,则生成一份新的。

    1
    $ ssh-keygen -t rsa -C "your_email@example.com"

    文件会默认生成放在上面的目录中,一般来说会有两个文件 id_rsaid_rsa.pub

  3. 然后登陆 Github 的网页,在个人的 Settings 中找到 SSH and GPG Keys 选项,向里面添加新的 SSH Key,title 随便写,然后把上面生成的 id_rsa.pub 文件的内容完全复制到输入框中,点击保存;

  4. 在网页上保存后,在本机执行命令验证 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,在里面创建密钥。创建完之后,后续使用正常的命令行即可。


Reference

  1. 使用 ssh 连接 github
  2. 使用 SSH 协议连接 Github
  3. windows 中 SSH 中文路径问题

Welcome to my other publishing channels