26 / 01 / 12

服务器多 GitHub 账号与项目身份同步配置指南

这是一篇为您整理好的技术指南,旨在帮助您在 Linux 服务器上优雅地管理多个 GitHub 账号多个项目配置


在服务器开发中,我们常面临这种场景:既要维护公司的私有仓库(工作账号),又要更新自己的开源项目(个人账号)。如果配置不当,容易出现权限拒绝或提交记录(Commit)身份混乱的问题。

本文将通过 SSH Alias(别名)Git Conditional Includes(条件包含) 两项技术,实现自动化身份切换。


第一阶段:配置多 SSH 密钥与别名

SSH 密钥用于解决“你是谁”的认证问题。

1. 生成独立的 SSH Key

为每个账号生成一对专属密钥,不要使用默认名称,以免覆盖。

Bash

# 生成工作账号密钥 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work@company.com" # 生成个人账号密钥 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "personal@gmail.com"

2. 将公钥添加到对应的 GitHub 账号

分别查看两个公钥内容,并将其复制到对应 GitHub 账号的 Settings -> SSH and GPG keys 中。

Bash

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

3. 配置 SSH Config 管理别名

创建或修改 ~/.ssh/config 文件,通过定义“假主机名”来强制指向特定的密钥。

Bash

nano ~/.ssh/config

写入以下内容:

Plaintext

# 工作账号别名 Host github-work HostName github.com User git IdentityFile ~/.ssh/id_ed25519_work IdentitiesOnly yes # 个人账号别名 Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_personal IdentitiesOnly yes

第二阶段:配置 Git 用户身份(Name/Email)

Git Config 用于解决提交记录中“作者是谁”的标识问题。

1. 建立目录规范

建议按文件夹归类项目,例如:

  • /www/work/ 目录下全是公司项目。

  • /www/personal/ 目录下全是个人项目。

2. 编写独立配置文件

在根目录创建两个细分配置:

创建 ~/.gitconfig-work

Ini, TOML

[user] name = WorkName email = work@company.com

创建 ~/.gitconfig-personal

Ini, TOML

[user] name = MyNickName email = personal@gmail.com

3. 在全局配置中启用“条件包含”

修改主配置文件 ~/.gitconfig,让 Git 根据项目所在的目录自动加载对应的身份。

Bash

nano ~/.gitconfig

加入以下逻辑:

Ini, TOML

[user] name = DefaultName email = default@mail.com # 如果目录在 /www/work/ 下,则加载 work 配置 [includeIf "gitdir:/www/work/"] path = ~/.gitconfig-work # 如果目录在 /www/personal/ 下,则加载 personal 配置 [includeIf "gitdir:/www/personal/"] path = ~/.gitconfig-personal

注意gitdir: 后的路径末尾必须带 /,否则匹配可能失效。


第三阶段:实战使用

1. 克隆新项目

在使用 git clone 时,需要将原地址中的 github.com 替换为您在 SSH Config 中定义的别名

  • 克隆工作项目:

    Bash

    git clone git@github-work:company-org/project-a.git /www/work/project-a
  • 克隆个人项目:

    Bash

    git clone git@github-personal:my-username/blog.git /www/personal/blog

2. 检查当前身份

进入目录后,执行以下命令验证:

Bash

cd /www/work/project-a git config user.email # 应当显示 work@company.com git remote -v # 应当显示 git@github-work:...

3. 处理已存在的项目

如果项目已经克隆好了,可以通过修改 Remote 地址来切换 SSH 密钥:

Bash

# 将原有的 github.com 换成 github-work 别名 git remote set-url origin git@github-work:company-org/project-a.git

总结清单

维度

配置位置

核心作用

认证 (Auth)

~/.ssh/config

通过别名区分使用哪把 SSH Key 连 GitHub

标识 (ID)

includeIf in ~/.gitconfig

根据项目路径自动切换 user.nameemail

操作 (Ops)

git clone / remote set-url

使用别名 Host 进行远程操作

通过这一套组合拳,您可以彻底告别“用公司邮箱往个人仓库提代码”的尴尬,同时保证多个账号在同一台服务器上互不干扰。

这是一个非常实用的需求。为了方便你快速配置,我为你写了一个交互式的 Shell 脚本。

这个脚本会自动:

  1. 询问 你的账号标识(如 work 或 personal)。

  2. 生成 对应的 ED25519 密钥。

  3. 自动写入 ~/.ssh/config 文件。

  4. 输出 公钥内容,方便你直接复制到 GitHub。


1. 创建脚本文件

在服务器上执行:

Bash

nano setup_github_ssh.sh

2. 粘贴以下代码

Bash

#!/bin/bash # GitHub SSH 多账号一键配置脚本 # Usage: bash setup_github_ssh.sh echo "------------------------------------------------" echo " GitHub SSH 多账号配置工具" echo "------------------------------------------------" # 1. 收集信息 read -p "请输入账号别名 (例如: work, personal, alpha): " ALIAS read -p "请输入 GitHub 绑定邮箱: " EMAIL KEY_PATH="$HOME/.ssh/id_ed25519_$ALIAS" CONFIG_FILE="$HOME/.ssh/config" # 2. 生成 SSH Key if [ -f "$KEY_PATH" ]; then echo "⚠️ 错误: 密钥 $KEY_PATH 已存在,请换一个别名或手动删除。" exit 1 fi echo "🚀 正在生成 SSH 密钥..." ssh-keygen -t ed25519 -C "$EMAIL" -f "$KEY_PATH" -N "" # 3. 配置 ~/.ssh/config echo "📝 正在配置 SSH 别名..." # 确保 .ssh 目录存在 mkdir -p "$HOME/.ssh" touch "$CONFIG_FILE" # 检查是否已经配置过该别名 if grep -q "Host github-$ALIAS" "$CONFIG_FILE"; then echo "⚠️ 警告: ~/.ssh/config 中已存在 Host github-$ALIAS,跳过写入。" else cat >> "$CONFIG_FILE" << EOF # GitHub Account: $ALIAS ($EMAIL) Host github-$ALIAS HostName github.com User git IdentityFile $KEY_PATH IdentitiesOnly yes EOF echo "✅ 已成功添加 github-$ALIAS 到 SSH 配置。" fi # 4. 设置权限 (安全起见) chmod 700 "$HOME/.ssh" chmod 600 "$KEY_PATH" chmod 600 "$CONFIG_FILE" # 5. 完成并显示公钥 echo "------------------------------------------------" echo "🎉 配置完成!" echo "------------------------------------------------" echo "1. 请将下方的公钥内容复制并添加到 GitHub (Settings -> SSH keys):" echo "" cat "${KEY_PATH}.pub" echo "" echo "------------------------------------------------" echo "2. 测试连接命令:" echo " ssh -T git@github-$ALIAS" echo "" echo "3. 克隆项目命令示例:" echo " git clone git@github-$ALIAS:用户名/仓库名.git" echo "------------------------------------------------"

3. 运行脚本

给予执行权限并运行:

Bash

chmod +x setup_github_ssh.sh ./setup_github_ssh.sh

脚本亮点说明:

  • 参数化生成:通过输入的 ALIAS 自动区分文件名(如 id_ed25519_work),不会弄乱你原有的密钥。

  • 权限保护:自动执行 chmod 600,防止 SSH 因为权限太开放(Permissions too open)而报错。

  • 无感写入:使用 cat >> 方式安全地将配置追加到 ~/.ssh/config 末尾。

  • 即插即用:脚本最后直接打印出公钥,你只需要用鼠标选一下复制,然后去 GitHub 粘贴即可。