0%

多平台配置ssh

多平台 SSH 配置:同时管理 GitHub、Gitee、GitLab 等仓库

在开发过程中,我们常常需要同时连接多个代码托管平台(如 GitHub、Gitee、GitLab 等),而每个平台通常需要独立的 SSH 密钥对以确保安全访问。本文将详细介绍如何在同一台设备上配置多个平台的 SSH 密钥,实现无冲突共存和便捷访问。

核心原理

SSH 协议通过密钥对(公钥 + 私钥)验证身份,不同平台的密钥对需要区分存储。通过配置 ~/.ssh/config 文件,可以为不同平台指定对应的密钥,实现 “一平台一密钥” 的隔离管理,避免密钥冲突。

详细配置步骤

1. 生成各平台独立的 SSH 密钥对

使用 ssh-keygen 命令为每个平台生成独立的密钥对,通过 -f 参数指定存储路径和文件名(避免默认文件名 id_rsa 导致覆盖)。

示例(以 GitHub、Gitee、GitLab 为例):
1
2
3
4
5
6
7
8
# 生成 GitHub 密钥对(邮箱替换为你的 GitHub 绑定邮箱)
ssh-keygen -t ed25519 -C "your_github_email@example.com" -f ~/.ssh/id_rsa_github

# 生成 Gitee 密钥对(邮箱替换为你的 Gitee 绑定邮箱)
ssh-keygen -t ed25519 -C "your_gitee_email@example.com" -f ~/.ssh/id_rsa_gitee

# 生成 GitLab 密钥对(邮箱替换为你的 GitLab 绑定邮箱)
ssh-keygen -t ed25519 -C "your_gitlab_email@example.com" -f ~/.ssh/id_rsa_gitlab
  • 说明:
    • ed25519 是比 rsa 更安全高效的算法,推荐使用(若系统不支持,可替换为 rsa)。
    • 生成过程中会提示设置密码(passphrase),建议设置以增强安全性,回车则为空密码。
    • 执行后,~/.ssh 目录下会生成对应文件(如 id_rsa_github 私钥、id_rsa_github.pub 公钥)。

2. 将私钥添加到 SSH 代理(可选但推荐)

为避免每次访问仓库都输入密钥密码,可通过 ssh-agent 管理私钥:

1
2
3
4
5
6
7
8
9
10
# 启动 SSH 代理
eval "$(ssh-agent -s)"

# 添加各平台私钥
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitee
ssh-add ~/.ssh/id_rsa_gitlab

# 验证私钥是否添加成功
ssh-add -l # 列出所有已加载的私钥
  • 注意
    若重启终端后私钥失效,需重新执行上述命令,或配置终端启动脚本自动加载(如 ~/.bashrc~/.zshrc 中添加 eval "$(ssh-agent -s)"ssh-add 命令)。

3. 配置 ~/.ssh/config 文件

创建或编辑 ~/.ssh/config 文件,为每个平台指定对应的密钥和访问规则,格式如下:

1
2
# 编辑配置文件
vim ~/.ssh/config

添加以下内容(根据实际平台调整):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# GitHub 配置
Host github.com
HostName github.com # 平台域名(固定)
User git # 用户名(代码托管平台统一为 git)
IdentityFile ~/.ssh/id_rsa_github # 对应私钥路径
PreferredAuthentications publickey # 优先使用公钥验证
IdentitiesOnly yes # 仅使用指定的密钥

# Gitee 配置
Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_gitee
PreferredAuthentications publickey
IdentitiesOnly yes

# GitLab 配置(以自建 GitLab 为例,若为官方则 HostName 为 gitlab.com)
Host gitlab.example.com # 替换为你的 GitLab 域名
HostName gitlab.example.com
User git
IdentityFile ~/.ssh/id_rsa_gitlab
PreferredAuthentications publickey
IdentitiesOnly yes
  • 参数说明:
    • Host:自定义别名(如 github.com),用于后续访问仓库时使用(如 git@github.com:username/repo.git)。
    • HostName:平台实际域名(必须正确,否则无法连接)。
    • IdentityFile:指定该平台对应的私钥路径。
    • IdentitiesOnly yes:强制使用指定的密钥,避免 SSH 尝试其他密钥导致冲突。

4. 将公钥配置到各平台

将每个平台对应的公钥(.pub 文件内容)添加到平台的 SSH 密钥设置中:

  1. 获取公钥内容

    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
  2. 在平台添加公钥

    • GitHub:进入 Settings → SSH and GPG keys → New SSH key,粘贴公钥内容并保存。
    • Gitee:进入 设置 → 安全设置 → SSH 公钥,粘贴公钥内容并保存。
    • GitLab:进入 User Settings → SSH Keys,粘贴公钥内容并保存。

5. 测试连接是否成功

使用 ssh -T 命令测试各平台的连接:

1
2
3
4
5
6
7
8
# 测试 GitHub 连接
ssh -T git@github.com

# 测试 Gitee 连接
ssh -T git@gitee.com

# 测试 GitLab 连接
ssh -T git@gitlab.example.com
  • 成功提示
    若返回类似 Hi username! You've successfully authenticated... 的信息,说明配置成功。
  • 失败排查
    • 检查 config 文件的 HostNameIdentityFile 是否正确。
    • 确认公钥已正确添加到平台。
    • 执行 ssh -vT git@xxx.com(加 -v 显示详细日志)排查具体错误。

使用示例:克隆多平台仓库

配置完成后,可直接通过标准 Git 命令克隆或操作各平台仓库,SSH 会自动匹配对应密钥:

1
2
3
4
5
6
7
8
# 克隆 GitHub 仓库
git clone git@github.com:username/github-repo.git

# 克隆 Gitee 仓库
git clone git@gitee.com:username/gitee-repo.git

# 克隆 GitLab 仓库
git clone git@gitlab.example.com:username/gitlab-repo.git

常见问题解决

  1. 密钥冲突或未生效

    • 确保 config 文件中 IdentitiesOnly yes 已配置,避免 SSH 优先使用默认密钥。
    • 执行 ssh-add -D 清除所有加载的密钥,再重新添加所需私钥。
  2. 权限问题

    • ~/.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-->
  1. 多账户同一平台
    若同一平台需要配置多个账户(如个人 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

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10