前言

论代码托管平台哪家强,当然是非 github 莫属了,但鉴于国内直连 GitHub 这忽好忽差的网络环境,还是 gitee 靠谱(也就靠谱了,有时找东西还得是GitHub啊)。所以一般都会有两个账号啦,左手 gitee,右手 GitHub,那么问题来了,我要在一台电脑上使用这俩货该怎么配置嘞?

食用前提,电脑已经安装好了 git;本文演示环境为 win11,其他操作系统同理(建议在 git bash 中操作)

清理旧的 ssh key(初次配置的直接跳过)

  1. 打开 Git Bash
  2. cd ~/.ssh 进入 .ssh 文件夹
  3. ls 查看是否有不需要的,使用 rm 文件名 删除

创建 ssh key

cd 进入到 ~/.ssh 目录下执行

  1. 创建 github 的 ssh key(请将 your_email@example.com 替换成你自己的邮箱)
ssh-keygen -t ed25519 -C "your_email@example.com" -f "id_rsa_github"

如果你使用的旧系统不支持Ed25519算法,请使用

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f "id_rsa_github"

然后无脑敲回车就好,直到出现这个

Your identification has been saved in id_rsa_github.
Your public key has been saved in id_rsa_github.pub.
The key fingerprint is:
SHA256:1ruKefyMCVLzyS7Rrh75sOOesq1jKO5mzHnGqh3rm5g your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|                 |
|         .       |
|      o.S .      |
|     ..*.. .     |
|o +.. =++ .      |
|.X.B+oo@++ .     |
|E*XooO@=*o+      |
+----[SHA256]-----+

或这个

Your identification has been saved in id_rsa_github.
Your public key has been saved in id_rsa_github.pub.
The key fingerprint is:
SHA256:i74gOIYOxNsXtdNsTHJdGzED+zx2hl+17lZ3mINm21Q your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|           ..*.  |
|          . o =  |
|       o o o .  .|
|.     . O   o . E|
| o   . oS=   B B.|
|o.o   ..o.  = @ =|
|=o..... .  o + ++|
|+. ..o      . o. |
| .    o.      .. |
+----[SHA256]-----+
  1. 同理创建 gitee 的 ssh key

与创建 github 的操作一致,仅在 -f 文件名参数上使用 _gitee 做区别

ssh-keygen -t ed25519 -C "your_email@example.com" -f "id_rsa_gitee"

如果你使用的旧系统不支持Ed25519算法,请使用

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f "id_rsa_gitee"
  1. 创建完成后会在 ~/.ssh 文件夹内生成以下文件
~/.ssh
$ ls
id_rsa_gitee  id_rsa_github  id_rsa_gitee.pub  id_rsa_github.pub

将SSH私钥添加到SSH代理

  1. 这次创建了 id_rsa_gitee、id_rsa_github,我们使用命令 ssh-add 命令添加私钥到代理

如果执行报错 “Error connecting to agent: No such file or directory”,可参考win 执行 ssh-add 报错 Error connecting to agent: No such file or directory

ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitee
  1. 添加成功会有类似提示
Identity added: C:/Users/liuti/.ssh/id_rsa_github (your_email@example.com)

配置 config

在 ~/.ssh 目录下新建一个config文件(可用 touch config 创建),添加如下内容(其中Host和HostName填写git服务器的域名,IdentityFile指定私钥的路径)

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitee
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github

将SSH密钥添加到GitHub/Gitee上的帐户

将SSH密钥添加到GitHub

  1. 在 git bash 执行 cat ~/.ssh/id_rsa_github.pub 得到你的公钥内容,复制下来
  2. 打开GitHub网页,登录你的账号,依次点击右上角头像 > Settings > SSH and GPG keys > new SSH key
  3. 在 “Title” 字段中,为新公钥添加个名字(可以是 my_pc 等描述公钥来源的信息,随便取啦,自己知道这个公钥是哪来的就好,方便后续管理,删除掉不要的设备上的公钥)
  4. 将之前复制的公钥内容粘贴到 “Key”
  5. 点击 Add SSH key 保存
  6. 可能会弹出验证窗口,输入你的github密码

将SSH密钥添加到Gitee

  1. 在 git bash 执行 cat ~/.ssh/id_rsa_gitee.pub 得到你的密钥内容,复制下来
  2. 打开Gitee网页,登录你的账号,依次点击右上角头像 > 设置 > SSH 公钥
  3. 在 “标题” 字段中,为新公钥添加个名字(可以是 my_pc 等描述公钥来源的信息,随便取啦,自己知道这个公钥是哪来的就好,方便后续管理,删除掉不要的设备上的公钥)
  4. 将之前复制的公钥内容粘贴到 “公钥”
  5. 点击 “确定” 保存
  6. 可能会弹出验证窗口,输入你的gitee密码

测试配置结果

用ssh命令分别测试

ssh -T git@gitee.com
ssh -T git@github.com

有些同学可能会有弹窗提示
“The authenticity of host ‘gitee.com (xxx.xxx.xxx.xxx)’ can’t be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxx”

此时我们只需要在弹窗输入框输入 yes 并回车就好
如果成功,会返回如下内容

$ ssh -T git@gitee.com
Hi 呀呀呀呀呀樂! You've successfully authenticated, but GITEE.COM does not provide shell access.
$ ssh -T git@github.com
Hi Pedro-null! You've successfully authenticated, but GitHub does not provide shell access.