在使用 Git 时,如果需要处理多个站点(例如 GitHub、GitLab、Gitea 等)并且每个站点上使用不同的账号,最佳做法是为每个平台配置不同的 SSH 密钥。这样可以确保每次提交都使用正确的身份,避免权限和身份混淆。下面是如何设置每个站点使用不同的 SSH 密钥和 Git 配置的 详细操作指南:

1. 生成 SSH 密钥

对于每个 Git 账户,你应该生成一对独立的 SSH 密钥。打开终端或命令行工具,执行以下命令来生成密钥,记得替换 your-email@example.com 为你在 Gitea 或其他 Git 服务上使用的邮箱地址:

ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

在提示“Enter file in which to save the key” 时,为每个账户提供一个唯一的路径,重复此步骤为不同的 Git 平台生成密钥。例如:

# 为Gitea账户生成的密钥,一般情况下存储路径默认是 C:\Users\你的用户名\.ssh
/home/yourusername/.ssh/id_rsa_gitea

2. 将 SSH 密钥添加到 SSH Agent

为确保 SSH agent 管理你的新密钥,运行:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_gitea  # /c/Users/yourusername/.ssh/id_rsa_gitea

3. 将公钥添加到 Git 平台

登录到你的 Gitea 账户或其他平台的 git 账户,找到添加 SSH 公钥的部分(通常在用户设置的 SSH keys 部分)。打开你的公钥文件(如 id_rsa_gitea.pub),复制其内容,并粘贴到网站相应的字段中。

4. 配置 Git 使用特定的 SSH 密钥

为了让 Git 使用正确的 SSH 密钥与特定的远程仓库通信,您需要编辑或创建 ~/.ssh/config 文件,为每个远程主机指定使用的密钥。

SSH 配置文件通常位于 ~/.ssh/config。这个文件用于定义主机和与之关联的特定配置,如密钥文件、用户名等。如果这个文件还不存在,您可以创建它。

# 进入.ssh目录
cd /c/Users/yourusername/.ssh

# 使用文本编辑器(如 nano 或 vim)创建或编辑 config 文件:
nano config

config 文件配置:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Host gitea163.com
  HostName gitea.com
  User git
  IdentityFile ~/.ssh/id_rsa_163
  IdentitiesOnly yes

Host gitea446.com
  HostName gitea.com
  User git
  IdentityFile ~/.ssh/id_rsa_gitea446
  IdentitiesOnly yes

这个配置告诉 SSH 对于特定的主机使用哪个密钥。

  • Host 是您自定义的标签名,用于在 Git 命令中引用。

  • HostName 是实际的服务器地址。

  • User 是服务器上用于 SSH 连接的用户名,通常对 Git 服务来说是 git

  • IdentityFile 指向您为该服务生成的特定 SSH 密钥文件。

  • IdentitiesOnly yes 确保 SSH 只使用指定的密钥文件进行认证。

如果您使用的是 nano

  • 按下 Ctrl+O 保存文件。

  • 按下 Ctrl+X 退出编辑器。

5. 测试您的配置

确保您的配置正确无误,可以通过尝试 SSH 到您配置的服务器来测试:

ssh -T git@gitea.example.com
ssh -T git@github.com

这些命令应该能让您接收到服务器的认证响应,如 GitHub 会告诉您您已经成功认证但不提供 shell 访问。

6. 配置 Git 用户信息

在克隆或工作于特定仓库时,确保配置正确的用户信息。在项目目录内运行:

git config user.name "Your Gitea Username"
git config user.email "your-email@example.com"

这些配置是局部的,只影响当前仓库。如需全局设置,可添加 --global 参数。

7. 克隆仓库

现在,当您克隆或与远程仓库交互时(如 git pushgit pull),Git 和 SSH 会自动使用正确的密钥和用户信息。确保在克隆时使用正确的远程仓库 URL,它应该匹配您在 ~/.ssh/config 文件中配置的主机名。

通过以上步骤,您可以有效地在同一设备上管理多个来自不同平台的 Git 账户,每个账户都有其对应的密钥和配置,从而避免提交时账户混淆的问题。这种方法提高了操作的灵活性和安全性。