返回

解决Git同时部署到GitHub和Gitee时,密钥SSH冲突问题

当有多个git账号的时候,比如一个是GitHub的,用于自己进行一些开发活动;后来觉得GitHub访问起来太慢了,又注册了国内的码云gitee账号(或者来一个gitlab账号,一般是公司内部用到的git)。我们在使用这几者时,就会涉及到一个问题:在绑定SSH密钥的过程中,生成第二个git的key的时候会覆盖第一个的key,导致必然有一个后面就用不了。

前言

问题描述:

  • 当我们拥有多个git账号的时候,比如一个是GitHub账号,用于自己进行一些开发活动;后来觉得GitHub访问起来太慢了,又注册了国内的码云gitee账号(或者来了一个gitlab账号,一般是公司内部用到的git)。我们在使用这几者时,就必然会涉及到一个问题:在绑定SSH密钥的过程中,生成第二个git的key的时候会覆盖第一个的key,导致必然其中有一个就用不了。

解决方案:

  • 多个ssh key管理:我们可以在.ssh文件目录下新建一个config文件配置一下,就可以解决问题

正文

一、原因分析:

注意:出现SSH密钥冲突问题的实质,其实就在于我们每次(尤其是第一次时)是否知道可以自定义密钥名

  • 很多人第一次生成密钥时,直接在命令行中:

    1
    2
    3
    
    git config --global user.name "用户名"                   
    git config --global user.email "用户邮箱"
    ssh-keygen -t rsa -C "用户邮箱"
    
  • 前两行是在设置用户名和邮箱,重点是上面第三行代码,即生成密钥的代码。如果就按这样写的话,那么密钥的文件名字就是默认的:

  • 那么我们在第二个平台进行生成密钥(比如我们已经生成过GitHub的ssh密钥,再准备生成gitee的密钥时):

  • 图中 Overwrite(y/n)? 即在提示是否覆盖:选择y,就会覆盖导致之前的失效;选择n,即取消本次的覆盖,就不会创建新的密钥了

二、解决方案:

1.查看ssh文件

  • 在桌面 点击鼠标右键 (Git Bash here) 进入 .ssh 文件夹 如下图(注意空格):

  • ls 命令检查是否存在 SSH Key

出现上图说明我们之前的确已经生成过SSH密钥了

注意:如果没有该文件夹,自己 C 盘的 用户路径下 新建 .ssh 文件夹

2.删除之前的.ssh

3.分别生成gitee和github 的 SSH Key

  • (1)生成github的密钥,自定义其名称

    1
    
    ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "id_rsa_github"
    
  • (2)配置github的SSH key

    输入自己的邮箱后一直回车,即可出现以下画面

  • (3)查看SSH Key

    1
    
    cat id_rsa_github.pub     // 这里是查看 github的 SSH Key
    

    出现下图:

  • (4)拷贝 ssh-rsa 开头的 ssh key,然后到github上添加ssh key

  • (5)配置gitee的 ssh key

操作和上面的类似,只是把命令换成了

1
2
ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "id_rsa_gitee"     //生成gitee的SSH Key
cat id_rsa_gitee.pub             //这里是查看gitee的SSHKey(这里注意和github区分一下)
  • (6)然后把生成的 ssh key 复制到 gitee,进行添加 ssh key 操作,(操作类似上面的 github 添加 ssh)

4.添加 config解决ssh冲突

  • 在 .ssh 文件夹路径下 ,执行命令:vi config

在这里面一个一个输入比较慢,所以先退出,先按键盘的 Esc,输入“ :wq ”,回车退出然后 C盘 的.shh 文件夹中 找到 并打开 config 文件,将下面的内容复制进 config 文件,保存即可

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 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

注意:上面这个是关键的一步,一定要新创建config文件来解决SSH冲突

5.测试

  • 执行ssh -T git@github.com,出现successfully,则github配置成功。
  • 执行ssh -T git@gitee.com,出现successfully,则gitee配置成功。

注意: 可能会出现下面的内容 (直接输入 yes 即可最终出现successfully,配置成功)

The authenticity of host ‘gitee.com (212.64.63.190)’ can’t be established. ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc. Are you sure you want to continue connecting (yes/no/[fingerprint])