为多个GitHub账户配置SSH密钥

embedded/2025/2/8 19:50:22/

背景

当需要同时使用多个GitHub账户(例如工作和个人账户)时,默认的SSH配置可能导致冲突。本文介绍如何通过生成不同的SSH密钥对并配置SSH客户端来管理多个账户。

操作步骤

  1. 生成SSH密钥对
    为每个GitHub账户生成独立的密钥对,并指定不同的文件名。

    命令示例:

    # 生成工作账户密钥(默认名称可选)
    ssh-keygen -t ed25519 -C "your_work_email@example.com"
    # 保存为 `id_ed25519_work`# 生成个人账户密钥
    ssh-keygen -t ed25519 -C "your_personal_email@example.com"
    # 保存为 `id_ed25519_personal`
    

    命令解释:

    • ssh-keygen: 生成SSH密钥对的命令。

    • -t ed25519: 指定密钥类型为Ed25519,这是一种现代且安全的密钥类型。

    • -C "your_email@example.com": 为密钥添加注释,通常使用与GitHub账户关联的电子邮件地址。

    • 在提示时选择文件名,例如id_ed25519_workd_ed25519_personal,以便后续区分。

    • 添加SSH密钥到ssh-agent

  2. 添加SSH密钥到ssh-agent
    确保密钥被SSH代理管理:

    # 启动ssh-agent(如未运行)
    eval "$(ssh-agent -s)"# 添加密钥(需根据密钥路径调整)
    ssh-add ~/.ssh/id_ed25519_work
    ssh-add ~/.ssh/id_ed25519_personal
    

    命令解释:

    • eval "$(ssh-agent -s)": 启动SSH代理并将其环境变量加载到当前Shell会话中。
    • ssh-add ~/.ssh/id_ed25519_work: 将工作账户的SSH密钥添加到SSH代理。
    • ssh-add ~/.ssh/id_ed25519_personal: 将个人账户的SSH密钥添加到SSH代理。
  • 配置SSH配置文件 (~/.ssh/config)
    创建或编辑配置文件,为每个账户指定对应的密钥和主机别名。

    配置文件示例:

    # 工作账户
    Host github.com-workHostName github.comUser gitIdentityFile ~/.ssh/id_ed25519_workIdentitiesOnly yes# 个人账户
    Host github.com-personalHostName github.comUser gitIdentityFile ~/.ssh/id_ed25519_personalIdentitiesOnly yes
    

    配置解释:

    • Host github.com-work: 为工作账户设置一个别名,方便后续使用。
    • HostName github.com: 指定实际的GitHub主机名。
    • User git: 指定用于SSH连接的用户名,GitHub的SSH连接始终使用git。
    • IdentityFile ~/.ssh/id_ed25519_work: 指定用于该别名的SSH密钥文件路径。
    • IdentitiesOnly yes: 确保只使用指定的密钥进行身份验证,而不尝试使用其他密钥。
  • 将公钥添加到GitHub账户
    复制对应公钥内容:

    cat ~/.ssh/id_ed25519_work.pub
    cat ~/.ssh/id_ed25519_personal.pub
    

    登录GitHub,依次进入 Settings → SSH and GPG keys → New SSH Key,分别添加公钥。

  • 测试连接
    验证SSH配置是否成功:

    ssh -T git@github.com-work
    # 应返回:Hi [work_username]! You've successfully authenticated...
    ssh -T git@github.com-personal
    # 应返回:Hi [personal_username]! You've successfully authenticated...
    

    命令解释:

    • ssh -T: 测试SSH连接,-T选项表示不分配伪终端。
    • git@github.com-work: 使用工作账户的别名进行连接。
  • 克隆仓库时使用别名
    克隆或配置仓库时,需替换URL中的github.com为配置的Host别名:

    原始URL:
    git@github.com:work_account/project.git

    修改后:
    git@github.com-work:work_account/project.git

注意事项

  1. 权限问题

    • 确保~/.ssh目录权限为700
      chmod 700 ~/.ssh
    • 密钥文件权限应为600
      chmod 600 ~/.ssh/id_ed25519_*
  2. 现有仓库配置更新
    若已克隆仓库,需修改本地仓库的远程URL:

    git remote set-url origin git@github.com-work:work_account/repo.git
    
  3. 多账户Commit关联
    SSH密钥仅处理身份验证,仓库内的Commit用户名/邮箱需通过Git配置单独设置:

    git config user.name "Work Name"
    git config user.email "work@example.com"
    

常见问题

  • 连接失败

    运行 ssh -T -v git@github.com-work 查看详细日志。

  • 密钥未加载

    确认 ssh-add -l 列出已添加的密钥。


http://www.ppmy.cn/embedded/160608.html

相关文章

DeePseek结合PS!批量处理图片的方法教程

​ ​ 今天我们来聊聊如何利用deepseek和Photoshop(PS)实现图片的批量处理。 传统上,批量修改图片尺寸、分辨率等任务往往需要编写脚本或手动处理,而现在有了AI的辅助,我们可以轻松生成PS脚本,实现自动化处…

电子电器架构 --- 电子电气架构设计要求与发展方向

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录,后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

Deep Sleep 96小时:一场没有硝烟的科技保卫战

2025年1月28日凌晨3点,当大多数人还沉浸在梦乡时,一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击,警报声响彻机房,一场针对中国关键信息基础设施的网络攻击来势汹汹! 面对美国发起的这场…

C#中的委托(Delegate)

什么是委托? 首先,我们要知道C#是一种强类型的编程语言,强类型的编程语言的特性,是所有的东西都是特定的类型 委托是一种存储函数的引用类型,就像我们定义的一个 string str 一样,这个 str 变量就是 string 类型. 因为C#中没有函数类型,但是可以定义一个委托类型,把这个函数…

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操 Janus-Pro-7B介绍 Janus-Pro-7B 是由 DeepSeek 开发的多模态 AI 模型,它在理解和生成方面取得了显著的进步。这意味着它不仅可以处理文本,还可以处理图像等其他模态的信息。 模型主要特点:Permalink…

yum 安装mysql

sudo yum install mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld 获取临时 root 密码并登录 MySQL 安装完成后,MySQL 会生成一个临时的 root 密码。你可以通过查看日志文件来找到这个密码: sudo grep ‘temporary password’…

【Python使用】嘿马头条项目从到完整开发教程第11篇:RPC,需求场景【附代码文档】

本教程的知识点为:简介 1. 内容 2. 目标 产品效果 ToutiaoWeb虚拟机使用说明 数据库 理解ORM 作用 思考: 使用ORM的方式选择 数据库 SQLAlchemy操作 1 新增 2 查询 all() 数据库 分布式ID 1 方案选择 2 头条 使用雪花算法 (代码 toutiao-backend/common/…