SSH是一种加密协议,全称为Secure Shell,用于安全地远程登录到服务器或其他远程设备上执行命令或传输文件。比较多的时候,工作、个人等需要可能有多个Git比如Gitlab、Github、Gitee等,我们需要使用多个SSH 秘钥来连接不同的Git。本文主要介绍mac如何管理多个SSH 秘钥来连接不同Git仓库。
SSH秘钥连接到GitHub
首先,我们简要介绍一下,如何给ssh连接Github
生成SSH密钥对
ssh-keygen -t rsa -C "email@Github.com"
生成的秘钥保存到 ~/.ssh/id_ed25519
)
GitHub添加公钥
在Github 登录到您的帐户,转到 "Settings"-- "SSH and GPG keys" -- "New SSH key" -- 将生成的秘钥粘贴 -- 保存即可
测试
运行如下命令
ssh -T git@github.com
这里是测试是否正常连接和验证身份。如果将收到一条消息(eg: "Hi Xxx! You've successfully authenticated"),表示已成功连接到 GitHub。
生成多个秘钥对
接着,我们讲讲如何使用不同的名称生成多个密钥对,例如: 我们给工作company.com生成秘钥id_rsa_company,给个人的github.com生成秘钥id_rsa_me
ssh-keygen -t rsa -f ~/.ssh/id_rsa_me -C "me@github.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_company -C "work@company.com"
密钥添加到代理
使用 SSH 代理可以方便地管理多个密钥,这样可以在需要时自动选择正确的密钥进行身份验证。
启动 SSH 代理:
eval "$(ssh-agent -s)"
将密钥添加到代理:
ssh-add ~/.ssh/id_rsa_me
ssh-add ~/.ssh/id_rsa_company
在SSH 配置文件,可以为每个主机设置相应的密钥,例如:
切换到配置文件路径(mac、Linux):
cd ~/.ssh/config
vi config
输入如下内容:
Host me-github
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_me
Host company-github
HostName work@company.com
User git
IdentityFile ~/.ssh/id_rsa_company
测试
ssh -T git@github.com
Hi jeffff! You've successfully authenticated...
ssh -T git@work@company.com
Hi jeffff! You've successfully authenticated...
这样,就给不同的公司、个人Git指定了不同的密钥
小结
经常我们使用ssh连接Git,ssh会生成秘钥和公钥,秘钥保存在本地,公钥需要添加到远端Git,当传输文件过程通过验证签名来校验权限。当需要多个SSH 秘钥连接不同Git时,我们可以通过修改ssh配置文件(~/.ssh/config)来管理, 它会根据需要(Host)选择正确的SSH 密钥进行身份验证。
参考
- Github Doc:增加新的ssh key docs.github.com/en/authenti…
- 如何配置 SSH 管理多个 Git 仓库和以及多个 Github 账号mp.weixin.qq.com/s/ADzad6e6u…
- Mac上给Github配置SSH zhuanlan.zhihu.com/p/346643769