多平台 SSH 配置:同时管理 GitHub、Gitee、GitLab 等仓库
在开发过程中,我们常常需要同时连接多个代码托管平台(如 GitHub、Gitee、GitLab 等),而每个平台通常需要独立的 SSH 密钥对以确保安全访问。本文将详细介绍如何在同一台设备上配置多个平台的 SSH 密钥,实现无冲突共存和便捷访问。
核心原理
SSH 协议通过密钥对(公钥 + 私钥)验证身份,不同平台的密钥对需要区分存储。通过配置 ~/.ssh/config 文件,可以为不同平台指定对应的密钥,实现 “一平台一密钥” 的隔离管理,避免密钥冲突。
详细配置步骤
1. 生成各平台独立的 SSH 密钥对
使用 ssh-keygen 命令为每个平台生成独立的密钥对,通过 -f 参数指定存储路径和文件名(避免默认文件名 id_rsa 导致覆盖)。
示例(以 GitHub、Gitee、GitLab 为例):
1 | # 生成 GitHub 密钥对(邮箱替换为你的 GitHub 绑定邮箱) |
- 说明:
ed25519是比rsa更安全高效的算法,推荐使用(若系统不支持,可替换为rsa)。- 生成过程中会提示设置密码(passphrase),建议设置以增强安全性,回车则为空密码。
- 执行后,
~/.ssh目录下会生成对应文件(如id_rsa_github私钥、id_rsa_github.pub公钥)。
2. 将私钥添加到 SSH 代理(可选但推荐)
为避免每次访问仓库都输入密钥密码,可通过 ssh-agent 管理私钥:
1 | # 启动 SSH 代理 |
- 注意:
若重启终端后私钥失效,需重新执行上述命令,或配置终端启动脚本自动加载(如~/.bashrc或~/.zshrc中添加eval "$(ssh-agent -s)"和ssh-add命令)。
3. 配置 ~/.ssh/config 文件
创建或编辑 ~/.ssh/config 文件,为每个平台指定对应的密钥和访问规则,格式如下:
1 | # 编辑配置文件 |
添加以下内容(根据实际平台调整):
1 | # GitHub 配置 |
- 参数说明:
Host:自定义别名(如github.com),用于后续访问仓库时使用(如git@github.com:username/repo.git)。HostName:平台实际域名(必须正确,否则无法连接)。IdentityFile:指定该平台对应的私钥路径。IdentitiesOnly yes:强制使用指定的密钥,避免 SSH 尝试其他密钥导致冲突。
4. 将公钥配置到各平台
将每个平台对应的公钥(.pub 文件内容)添加到平台的 SSH 密钥设置中:
获取公钥内容:
1
2
3
4
5
6
7
8# 查看 GitHub 公钥
cat ~/.ssh/id_rsa_github.pub
# 查看 Gitee 公钥
cat ~/.ssh/id_rsa_gitee.pub
# 查看 GitLab 公钥
cat ~/.ssh/id_rsa_gitlab.pub在平台添加公钥:
- GitHub:进入
Settings → SSH and GPG keys → New SSH key,粘贴公钥内容并保存。 - Gitee:进入
设置 → 安全设置 → SSH 公钥,粘贴公钥内容并保存。 - GitLab:进入
User Settings → SSH Keys,粘贴公钥内容并保存。
- GitHub:进入
5. 测试连接是否成功
使用 ssh -T 命令测试各平台的连接:
1 | # 测试 GitHub 连接 |
- 成功提示:
若返回类似Hi username! You've successfully authenticated...的信息,说明配置成功。 - 失败排查:
- 检查
config文件的HostName和IdentityFile是否正确。 - 确认公钥已正确添加到平台。
- 执行
ssh -vT git@xxx.com(加-v显示详细日志)排查具体错误。
- 检查
使用示例:克隆多平台仓库
配置完成后,可直接通过标准 Git 命令克隆或操作各平台仓库,SSH 会自动匹配对应密钥:
1 | # 克隆 GitHub 仓库 |
常见问题解决
密钥冲突或未生效:
- 确保
config文件中IdentitiesOnly yes已配置,避免 SSH 优先使用默认密钥。 - 执行
ssh-add -D清除所有加载的密钥,再重新添加所需私钥。
- 确保
权限问题:
- ~/.ssh目录权限需为700,密钥文件权限需为600(否则 SSH 会拒绝使用):
<!--hexoPostRenderEscape:<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chmod 700 ~/.ssh</span><br><span class="line"> chmod 600 ~/.ssh/id_rsa_*</span><br></pre></td></tr></table></figure>:hexoPostRenderEscape-->
多账户同一平台:
若同一平台需要配置多个账户(如个人 GitHub + 公司 GitHub),可在config中通过不同Host别名区分:1
2
3
4
5
6
7
8
9
10
11# 个人 GitHub
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_personal
# 公司 GitHub
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_work使用时通过别名访问:
git clone git@github-work:company/repo.git
v1.3.10