场景:在多托管平台下,如
gitlab和github等,生成SSH key pair的方法以及防止这些秘钥对文件冲突的策略(就是能正确做到各回各家 各找个妈 成功拉取到对应的项目)
生成 SSH key pair
- 在终端输入:
ssh-keygen -t ed25519 -C "email@example.com"
- 注:后面的邮箱换成你使用的有效邮箱
-
gitlab推荐使用ED25519加密方式,因为它安全性更强、性能更好
-
执行上面的命令后,会让你填写秘钥存放路径。有两种方式:
1. 直接按回车键,就是默认路径: `~/.ssh/id_ed25519` //gitlab_company_rsa 是自定义的名字 根据公司区分文件名 2. 手动输入一个路径,比如:`~/.ssh/gitlab_company_rsa`这里推荐使用 手动输入一个路径的方法,因为这是避免混淆的第一步
如果你加入不止一家公司的私有gitlab组,那么这样区分很有意义 拷贝生成的 SSH公钥内容:
//gitlab_company_rsa 换成你自己指定的文件名
pbcopy < ~/.ssh/gitlab_company_rsa.pub
- 添加 SSH 公钥到你的账号
- 登录你的 gitlab 账号,点击头像 进入
Settings - 点击左侧
SSH Keys, 把刚才拷贝的内容粘贴到右侧的Key区域 - 点击 Add key
- 登录你的 gitlab 账号,点击头像 进入
为SSH客户端配置私钥路径
为了避免混淆,在上面的第2步,我们没有使用默认的秘钥路径。所以,为了让 SSH 客户端能找到该私钥,并成功链接到 gitlab,还需要做如下配置:
//gitlab_company_rsa 换成你自己指定的文件名
eval $(ssh-agent -s)
ssh-add ~/.ssh/gitlab_company_rsa
配置 gitlab host
然后打开 ~/.ssh/config(如果没有这个文件执行 vi ~/.ssh/config 进行创建):
open ~/.ssh/config
按照下面的内容格式,配置你的 gitlab host,有几个公司的 host,就配置几个 :
# Private GitLab instance
Host gitlab.company.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab_company_rsa
# Private GitLab instance2
Host gitlab.company2.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab_company2_rsa
#如果有 github 那么下面也会包含有 github 的域名配置
#类似下面这样
#Host *
#AddKeysToAgent yes
#UseKeychain yes
#IdentityFile ~/.ssh/id_rsa
注意:如果是给github添加ssh,那么再执行下面命令,id_ed25519换成你自定义的文件名:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
验证该 host 是否能正常访问:
ssh -T git@gitlab.company.com
如果输出以下内容:
The authenticity of host 'gitlab.company.com (35.231.145.151)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.company.com' (ECDSA) to the list of known hosts.
输入 yes 把此地址添加到 known_hosts 文件。再次执行 ssh -T git@gitlab.company.com 验证是否能访问。如果输出 Welcome to GitLab, @用户名! 说明 gitlab 服务访问成功
最后
github 的秘钥对生成方式和 上面介绍的 gitlab 类似,只不过它使用的加密方式是 RSA。防止混淆的策略同上。其中 为SSH客户端配置私钥路径 和 配置 gitlab host 是比较重要的两步,不然即使指定了不同的秘钥文件路径,但还是会出现下载项目失败的问题。