github,gitee,gitlab 多个 ssh key 的同时配置

1,249 阅读2分钟

1. 初次配置 SSH

参考:

2.查看SSH公钥

mac下:

$ cd ~/.ssh

$ cat id_rsa.pub

3. 多个 ssh key 的配置方式

1. 查看当前git是否存在全局用户名邮箱

$ git config user.name git config user.email

2. 如果已经设置全局用户名邮箱请先清除

$ git config --global --unset user.name "你的名字" 
$ git config --global --unset user.email "你的邮箱"

3. 创建私钥 文件:

ssh-keygen -t rsa -C “yourgithub@email.com” -f [github_id-rsa] # ( github_id-rsa 自定义名称即可 )

提示:Enter passphrase (empty for no passphrase):

意思是设置密码,在git提交代码时需要输入密码,也可以不设置,直接继续就可;

4. 如,同时配置 gitlab,gitee,github 三个code托管平台, 此时你的 ~/.ssh 文件夹下会出现 如下文件列表:

  • github_id-rsa
  • github_id-rsa.pub
  • gitlab_id-rsa
  • gitlab_id-rsa.pub
  • gitee_id-rsa
  • gitee-id_rsa.pub

5. 查看 github_id-rsa.pub 文件 内容:

vim [github_id-rsa]

6. 拷贝 github_id-rsa.pub 文件内容 到 github ssh keys

点击用户头像 --> setting --> SSH and GPG keys --> New SSH key

7. 创建一个 config 来管理 公钥 和 私钥:

$ cd ~/.ssh/ 
$ touch config 
$ vim config

8. 配置config文件

# github 
Host github.com 
Hostname ssh.github.com 
Port 443 
User [自定义 user name] 
IdentityFile ~/.ssh/github_id-rsa 

# gitlab 
Host yourgitlab域名.com 
Hostname yourgitlab域名.com 
User [自定义 user name] 
IdentityFile ~/.ssh/gitlab_id-rsa 

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

9. 删除缓存的秘钥(这一步非必须,比如您是刚刚安装git的)

$ ssh-add -D

10. 查看是否配置成功

github 查看成功与否:

Plan 1: 测试域名是否能正常建立连接

$ ssh -T <git@github.com>

提示:

如下,输入yes 即可;

The authenticity of host '[ssh.github.com]:443 ([198.19.0.211]:443)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?

Plan 2: 直接 ssh clone 项目

$ git clone git@github.com:[username]/xxx.git

gitlab 查看成功与否:

Plan 1: 测试域名是否能正常建立连接

$ ssh -T <git@gitlab.xxx.com>

Plan 2: 直接 ssh clone 项目

$ git clone git@gitlab:[项目组]/xxx.git

gitee 查看成功与否:

Plan 1: 测试域名是否能正常建立连接

$ ssh -T <git@gitee.com>

Plan 2: 直接 ssh clone 项目

$ git clone git@gitee.com:[username]/test.git

11. github pull/push 去掉密码验证:

$ ssh-add -K  # 对应的 .ssh 下的 id_rsa 文件

然后 enter, 输入 密码

之后会出现你的邮箱账号,则为成功!之后再 pull/push 时,就不需要输入密码了!


问题 & 解决

WT-1. 问题1 & 解决:

问题:

a.

kex_exchange_identification: read: Connection reset by peer

b.

The authenticity of host '[ssh.github.com]:443 ([192.30.253.122]:443)' can't be established.

RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '[ssh.github.com]:443,[192.30.253.122]:443' (RSA) to the list of known hosts.

git@ssh.github.com: Permission denied (publickey).

原因:

没有添加代理

解决:

将你的对应 ssh_id-rsa 文件添加进去

$ ssh-add ~/.ssh/gitlab_id-rsa

再检查一次:

# gitlab检查

$ ssh -T git@gitlab.XXX.com

WT-2. 问题2 & 解决:

问题:

Could not open a connection to your authentication agent.

原因:

没能够和权限代理创建连接

解决

建立连接:

$ eval $(ssh-agent)

再检查一次:

# gitlab检查

$ ssh -T git@gitlab.XXX.com

WT-3. 问题3 & 解决:

问题:

出现访问 id_rsa 权限 0644 问题,也就是 Permissions 0644 for '/c/Users/xxx/.ssh/id_rsa' are too open 问题。

原因:

看日志报出的错误,"It is required that your private key files are NOT accessible by others",翻译就是需要私钥文件不能被其他人所访问。私钥是访问linux服务器的凭证,

如果被别人获取到,就可能对服务器安全造成影响,这可能也就是这个问题的初衷吧。

解决:

按照错误提示,该文件不能被其他人访问,只要将所属组和其他人的read权限取消即可

执行:

$ chmod 0600 ~/.ssh/github_id-rsa

再检查一次:

# gitlab检查

$ ssh -T <git@gitlab.XXX.com>

示例:我的配置

要配置的信息:

gitlab:

user.name = [我的 gitlab user.name]

user.email = [我的 gitlab user.email]


github:

user.name = [我的 github user.name]

user.email = [我的 github user.email]


gitee:

user.name = [我的 gitee user.name]

user.email = [我的 gitee user.email]

运行脚本:

cd ~/.ssh 
ssh-keygen -t rsa -C “我的github邮箱” -f id-rsa-github 
ssh-keygen -t rsa -C “我的gitee邮箱” -f id-rsa-gitee 
ssh-keygen -t rsa -C “我的gitlab邮箱” -f id-rsa-gitlab

touch config

此时文件列表:

  • config
  • id-rsa-gitee
  • id-rsa-gitee.pub
  • id-rsa-github
  • id-rsa-github.pub
  • id-rsa-gitlab
  • id-rsa-gitlab.pub

配置config文件内容:

# github 
Host github.com 
Hostname ssh.github.com 
Port 443 
User [github username] 
IdentityFile ~/.ssh/github_id-rsa 

# gitee 
Host gitee.com 
HostName gitee.com 
PreferredAuthentications publickey 
IdentityFile ~/.ssh/gitee_id-rsa 

# gitlab 
Host @chanjet.com 
Hostname jichengy@chanjet.com 
User [gitlab username]
IdentityFile ~/.ssh/gitlab_id-rsa

测试:

# test gitlab 
ssh -T git@gitlab.rd.chanjet.com 

# test github 
ssh -T git@github.com 

# test gitee 
ssh -T git@gitee.com

参考: