SSH key 连接不同github仓库

SSH key 连接不同github仓库

不再孤独ing MVP++

# 一文搞定!不同远程GitHub仓库的SSH key(ED25519新版)配置方法

使用GitHub时,SSH key是最安全便捷的认证方式,无需反复输入账号密码。很多人困惑:管理多个仓库(个人/公司、不同账号)时,如何配置SSH key实现无感切换?核心答案:为不同场景配置独立的ED25519新版SSH key(替代旧版RSA,更安全高效,你提及的55219即指此类型),再通过配置文件映射对应关系即可。本文全程实操,新手可直接跟着走。

一、前置知识:为什么需要多key配置?

默认生成的SSH key(旧版RSA)存于~/.ssh目录,若只配置一套,操作不同账号仓库时,GitHub无法区分身份,会提示权限不足。例如个人账号key无法访问公司仓库,因此需为不同账号/场景配置独立ED25519 key。

二、核心操作:分场景配置ED25519 SSH key

以下命令适用于Windows(Git Bash)、Mac、Linux,全程在终端执行,步骤简洁且关键。

场景1:同一GitHub账号,多个仓库(简化配置)

同一账号下所有仓库,一套ED25519 key即可通用,配置一次终身可用。

  1. 检查本地key:执行以下命令,若有id_ed25519id_ed25519.pub,说明已有新版key;无则继续。
    ls ~/.ssh

  2. 生成ED25519 key:替换邮箱为GitHub绑定邮箱,回车留空路径和密码(或设置密码更安全):
    ssh-keygen -t ed25519 -C "your_email@example.com"

  3. 添加公钥到GitHub

    1. 执行以下命令,复制完整输出(从ssh-ed25519开始到邮箱结束):
      cat ~/.ssh/id_ed25519.pub

    2. 登录GitHub→Settings→SSH and GPG keys→New SSH key,粘贴公钥并保存。

  4. 测试连接:执行以下命令,输出成功认证提示即配置完成:
    ssh -T git@github.com

场景2:不同GitHub账号,多个仓库(核心场景)

个人+公司账号场景,需为每个账号生成独立ED25519 key,通过~/.ssh/config文件映射。

  1. 生成多组ED25519 key:假设个人账号user1(邮箱user1@example.com)、公司账号user2(邮箱user2@company.com),执行以下命令:
    # 个人账号key ssh-keygen -t ed25519 -C "user1@example.com" -f ~/.ssh/id_ed25519_user1 # 公司账号key ssh-keygen -t ed25519 -C "user2@company.com" -f ~/.ssh/id_ed25519_user2 生成后,~/.ssh会出现4个文件(两组公私钥)。

  2. 公钥对应添加到账号:将id_ed25519_user1.pub添加到user1账号,id_ed25519_user2.pub添加到user2账号(操作同场景1第3步)。

  3. 配置config文件(关键)

    1. 创建文件:
      touch ~/.ssh/config

    2. 编辑文件(vim ~/.ssh/config),添加以下内容(替换对应信息):
      # 个人账号 Host github.com-user1 HostName github.com User git IdentityFile ~/.ssh/id_ed25519_user1 # 公司账号 Host github.com-user2 HostName github.com User git IdentityFile ~/.ssh/id_ed25519_user2

    3. 保存退出(vim按ESC,输入:wq回车)。

  4. 测试连接:分别执行以下两条命令,输出对应账号成功提示即可:
    ssh -T git@github.com-user1 ssh -T git@github.com-user2

  5. 克隆/关联仓库

    1. 个人仓库:git clone git@github.com-user1:user1/my-personal-repo.git

    2. 公司仓库:
      git clone git@github.com-user2:user2/my-company-repo.git

    3. 已克隆仓库修改远程地址:
      git remote set-url origin 对应Host地址

场景3:同一账号,不同仓库(特殊需求)

同一账号需区分仓库(如工作/个人),配置方法同场景2,只需将两组ED25519 key都添加到同一个GitHub账号,再配置config文件即可。

三、常见问题排查(避坑)

问题1:ssh: connect to host github.com port 22: Connection refused

原因:端口22被拦截,解决:在config文件对应Host下添加以下配置:
Port 443

问题2:Permission denied (publickey)

原因:公钥添加错误、config配置有误、私钥权限过高。解决:执行以下命令修改权限,重新检查公钥和config:
chmod 600 ~/.ssh/id_ed25519_*

问题3:Could not resolve hostname

原因:Host拼写错误,解决:确保克隆命令中的Host与config文件完全一致。

四、总结

核心逻辑:ED25519新版key生成+config文件映射。同一账号多仓库用一套key,不同账号多仓库用多套key,重点注意私钥权限、公钥对应账号,配置后即可无感切换,安全高效。

Comments