前言
重新搭建了gitlab服务器来管理代码。再加上自己的GitHub托管平台,码云托管平台,每个平台都需要 SSH KEY 来登陆。这些平台都使用同一个公钥(id_rsa/id_rsa.pub 默认生成的 私/公钥)是否可以?答案肯定是可以的,但是有很多弊端,这里我就不说了。
添加、配置、管理多个公/私钥。总有一些坑要踩过,所以写个文档记录下需要注意的地方和踩过的坑。原文连接
添加多个 ssh key
1、新添加 ssh key
//为了保证后面只需要输入名字首先切换到本机ssh目录
cd ~/.ssh
//创建ssh-key
ssh-keygen -t rsa -C "yourname@email.com"
//为新生成的秘钥命名,由于已经在ssh目录下了,所以只需输入文件名
Enter file in which to save the key (/Users/admin/.ssh/id_rsa):id_ras_github
同样的方式根据不同的平台生成三个秘钥对,目录(~/.ssh)最后的结果如下:
//自己的 gitlab
id_rsa_yiliao
id_rsa_yiliao.pub
//码云 gitee.com
id_rsa_mayun
id_rsa_mayun.pub
//GitHub github.com
id_rsa_github
id_rsa_github.pub
2、设置ssh key的代理
- 1、首先查看代理
ssh-add -l
若提示
Could not open a connection to your authentication agent.
则系统代理里没有任何key,执行如下操作
exec ssh-agent bash
若系统已经有ssh-key 代理 ,可以删除
ssh-add -D
-
2、代理中添加私钥
默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:
ssh-add ~/.ssh/id_rsa_yiliao
ssh-add ~/.ssh/id_rsa_mayun
ssh-add ~/.ssh/id_rsa_github
ssh-add -l
2048 SHA256:ojXu/V77OR1muXEWtMJ0BLw3VQ7UVIfCkoKmZnIoa30 /Users/admin/.ssh/id_rsa_yiliao (RSA)
2048 SHA256:1XZBkfKzSc+WgXpqzPw2nuaVBMuIaFamdt+9i7HSOtE /Users/admin/.ssh/id_rsa_github (RSA)
2048 SHA256:uk0N6t4zmwFLf3ySBTBKYMzF9qD42ZxLGzGU8UrXBRY /Users/admin/.ssh/id_rsa_mayun (RSA)
- 3、编辑配置文件config
touch ~/.ssh/config
//或者
vim ~/.ssh/config
添加内容
# yiliao
Host yiliao.com
HostName yiliao.com
IdentityFile ~/.ssh/id_rsa_yiliao
user git
# github
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
user git
# mayun
Host mayun
HostName gitee.com
IdentityFile ~/.ssh/id_rsa_mayun
user git
这里说明一下每个字段的意思:
# 服务器1
Host 别名(方便记忆)
HostName IP地址或者域名(可以写假域名,但要在host文件中绑定ip地址)
Port 默认是22可以不写,如果自己搭建的服务器监听的是其他端口这个参数必须声明
IdentityFile 私钥文件路径
User 用户名一般写git就行
-
4、添加公钥
这里以GitHub为例,其他平台添加流程基本一样。
通过cat命令查看公钥内容,并复制全部内容(从ssh-rsa开始复制到最后邮箱结束,全部复制)
cat ~/.ssh/id_rsa_github.pub
添加步骤如下:
-
5、测试
测试是否可以SSH连接服务器一下几种方式都可以:
ssh -T git@github.com (域名)
ssh -T git@config文件中的别名
ssh -T git@ip地址
这时候,如果提示:
admin ~/Desktop: ssh -T git@github.com
The authenticity of host 'github.com (13.229.188.59)' can't be established.
ECDSA key fingerprint is SHA256:XkVfJu/1xvcPAHO4FLkTSZovag9e0isE3bBxu19bYtY.
Are you sure you want to continue connecting (yes/no)?
那么输入yes,然后回车。(因为第一次访问时known_hosts中没有记录,输入yes回车下次就不会提示了,并保存到known_hosts中)
ssh -T git@xxx 这里的xxx是在config文件中的Host。找出SSH对应的host。HostName就是git托管的平台url。
若出现
Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.
则表示成功。若出现
permission denied (publickey)
请检查github的ssh管理里添加的公钥是否正确。
-
6、修改host
如果没有域名,域名到期时只能通过ip地址去访问git服务器,这个时候为了保证 ~/.ssh/config文件的一致性,可以设置host文件。
vim /etc/hosts
添加 ip地址 域名
//添加ip地址(这里是假的ip地址) 域名
13.229.188.59 yiliao.com
13.229.188.59 gitee.com
13.229.188.59 github.com