Git配置多个SSH-Key

如果项目托管的仓库比较多,使用的账号比较多,自然用到的key就用到不同key了。 比如一个gitee,用于公司 工作开发; 一个github,用于自己进行一些开发活动;

解决方法

  1. 生成一个公司用的SSH-Key

$ ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitee_id_rsa

  1. 生成一个github用的SSH-Key

$ ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/github_id_rsa

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

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

  1. 使用命令cat ~/.ssh/gitee_id_rsa.pub查看github的SSH Key,复制ssh开头的那一串公钥,添加到github仓库。


    image.png

4.用ssh命令分别测试

$ ssh -T [email protected]
$ ssh -T [email protected]

配置多个SSH-Key常见错误:

1. 为了区分不同的密钥有不同的用处,对生成的密钥进行了重命名,配置好后,进行测试:

ssh -T [email protected],出现如下错误:

先执行:ssh-agent bash (一定要先执行这一步!)
再执行:ssh-add ~/.ssh/xxx (xxx为生成的私钥文件,不是后缀名是pub的文件)
生成密钥的指令:ssh-keygen -t rsa -C "[email protected]"

2. 执行 git push -u orgin master 时出现如下错误:

意思是请确保您具有正确的访问权限并且存储库存在。如果生成密钥时候的名字不是id_rsa(这个名字是默认的),而是自己重新命名的(就像上面我配置了多个SSH-Key,为了区分,对生成的密钥进行了重新命名),就需要去在C:\Users\coder.ssh目录下创建confIg文件,然后再执行 ssh-add命令将添加密钥到ssh-agent中。因为git默认读取id_rsa的公钥文件,如果不是为这个名字,就会报错。如下图:

 $ ssh-add ~/.ssh/gitcode_xxx_id_rsa

3.如果是这个错误 ! [remote rejected] master -> master (pre-receive hook declined)

error: failed to push some refs to 'gitcode.net:xxxxx.git'


这是因为所push的分支权限为protected,只有项目的管理员或者项目的管理员指派的具有相应权限的人才能进行push,要进行项目的push,有如下两种方法:

第一种解决办法:

1.将所要push的内容所在的分支的protected权限关闭
(1)进入所在项目的settings

(2)点击进入Protected branches,点击unprotected将master分支的权限改变,即关闭master的protected权限

第二种方法

2.新建其它分支,将项目push到新建的分支上(要确保远程也有dev分支,否则仍然推送不上去)


参考:https://gitee.com/help/articles/4229#article-header0

你可能感兴趣的:(Git配置多个SSH-Key)