git-不同git仓库配置不同ssh秘钥

0.背景

本文介绍,当使用多个git仓库时:

  • 如何生成及配置秘钥
  • 如何为不同的仓库配置不同的秘钥

1.ssh秘钥对生成

# 进入ssh秘钥文件存储位置
# linux下默认存储在: ~/.ssh     win下默认存储在: C:\Users\用户名\.ssh
cd Users\用户名\.ssh
 
# 生成ssh秘钥
# 替换bitbucket_ed25519为自己的秘钥文件名(自定义)
ssh-keygen -t ed25519 -f bitbucket_ed25519

一路回车即可

image-20250715172601166

然后,在.ssh目录下就能看到刚才生成的秘钥对。

image-20250715185449937

2.仓库配置ssh公钥

一般在仓库的头像下有全局设置,此处以gitee为例。

image-20250715184408547

录入刚才生成的公钥值,备注自定义。

image-20250715184501170

账户配置好公钥后,可以输入下列命令测试连接情况。

# -vvv常用于查看详细信息
# 替换你的私钥路径
ssh -vvv -T git@gitee.com -i C:\Users\yang37\.ssh\id_ed25519

8b5b8befa7045bc340837d6ddd432262

3.xx域名使用xx秘钥

本地电脑使用到多个代码仓库时,例如gitee、github等等

在.ssh目录下新建config文件(无后缀名)。

image-20250715173337022

编辑此配置文件:

Host: 别名(可自定义,建议用仓库域名方便记忆)。
    HostName: 实际仓库服务器地址。
    User: Git 服务器用户名(通常是 git)。
    Port: SSH 端口(默认是22,根据实际情况修改)。
    IdentityFile: 私钥路径(注意是私钥不是公钥)。
    IdentitiesOnly yes: 强制只使用指定的密钥,不尝试其他密钥。

示例:

Host gitee.com
  HostName gitee.com
  User git
  IdentityFile C:\Users\yang37\.ssh\id_ed25519
  IdentitiesOnly yes
  SetEnv GIT_AUTHOR_NAME="yang37"
  SetEnv GIT_AUTHOR_EMAIL="yang37z@qq.com"
  SetEnv GIT_COMMITTER_NAME="yang37"
  SetEnv GIT_COMMITTER_EMAIL="yang37z@qq.com"

又比如同一平台下使用多个账号:

# === GitHub 主账号 ===
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_github_main
    IdentitiesOnly yes

# === GitHub 次账号(别名访问)===
Host github-alt
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_github_alt
    IdentitiesOnly yes

可以用之前的测试命令进行验证,如果返回了绑定账号的欢迎信息,就说明配置和密钥绑定正确。

# @这里可以替换为别名,例如上方的@github-alt
ssh -T git@gitee.com

image-20250715190332792

4.扩展

4.1 基本原理

基于非对称秘钥算法:

类型 存放位置(默认) 说明
私钥 ~/.ssh/id_rsa 不能泄露,本地保存
公钥 ~/.ssh/id_rsa.pub 提交给 Git 服务器验证身份
  • 私钥加签、公钥验签。
  • 公钥加密、私钥解密。

鉴权原理,简化逻辑如下:

  • Git仓库把一个加密 challenge 发给客户端(公钥加密)
  • 客户端用私钥解密并回应
  • Git仓库验证响应是否正确
  • 正确:密钥持有者 → 身份认证通过

4.2 命令行验证成功但是拉取还是弹登录窗

注意选择SSH方式拉取,而非HTTPS(Git 试图用 HTTPS 方式连接 Gitee,触发了凭据弹窗(用户名/密码或 token))。

image-20250715173516563

posted @ 2025-07-15 18:59  羊37  阅读(121)  评论(0)    收藏  举报