同一台电脑多个密钥的使用方式

同一台电脑完全可以有多个私钥

每一套私钥 + 公钥都是完全独立的数学密钥对,互相没有关联,想生成多少套都可以。核心是通过「自定义文件名」区分不同密钥,再通过 SSH 配置文件自动匹配使用场景。

下面我按「生成方法 → 区分使用 → 注意事项 → 常见误区」完整讲清楚。


一、如何生成多个不同的私钥

SSH 密钥默认生成的文件名是 id_ed25519(或 id_rsa),如果直接回车生成第二套,会直接覆盖第一套,这是最常见的坑。

生成多套密钥的核心:给每套密钥指定不同的文件名

方法 1:命令行直接指定文件名(推荐)

-f 参数直接指定密钥文件的保存路径和名称,不用交互中途修改。

示例:生成两套密钥,一套个人用,一套公司用

# 1. 生成个人GitHub用的密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "personal@example.com"

# 2. 生成公司GitLab用的密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work@company.com"

执行后会提示设置私钥密码(passphrase),可以直接回车留空,也可以设置密码增强安全性。

生成完成后,~/.ssh 目录下会多出 4 个文件:

  • id_ed25519_personal / id_ed25519_personal.pub:个人私钥 + 公钥
  • id_ed25519_work / id_ed25519_work.pub:公司私钥 + 公钥

方法 2:交互模式手动输入文件名

如果不带 -f 参数,执行 ssh-keygen -t ed25519 后会出现提示:

Enter file in which to save the key (/Users/xxx/.ssh/id_ed25519):

这时候不要直接回车,输入自定义的路径和文件名即可,比如:

/Users/xxx/.ssh/id_ed25519_github

生成后使用命令读取公钥

cat ~/.ssh/id_ed25519.pub

二、使用时如何区分:自动匹配对应私钥

生成了多套私钥后,SSH 默认只会尝试默认文件名的密钥,自定义的密钥不会自动生效。需要通过 ~/.ssh/config 配置文件,让不同的仓库 / 平台自动对应不同的私钥。

配置文件路径

  • macOS/Linux:~/.ssh/config
  • Windows:C:\Users\你的用户名\.ssh\config

如果文件不存在,直接新建一个纯文本文件,命名为 config(没有后缀)。

场景 1:不同平台用不同私钥(最常用)

比如 GitHub 用个人密钥,公司内网 GitLab 用工作密钥,按域名匹配。

在 config 里写入:

# 个人GitHub账号
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    PreferredAuthentications publickey

# 公司GitLab
Host git.company.com
    HostName git.company.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    PreferredAuthentications publickey

效果

  • 只要你访问 github.com 的仓库,自动用个人私钥鉴权
  • 访问 git.company.com 的仓库,自动用公司私钥鉴权
  • 克隆仓库时正常用原地址即可,不用改任何东西,完全无感

场景 2:同一平台多个账号(比如两个 GitHub 账号)

同一个平台(比如 github.com)有两个账号,不能靠域名区分,需要用「Host 别名」来区分。

配置示例:

# 个人GitHub账号(别名:github-personal)
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal

# 工作GitHub账号(别名:github-work)
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

使用方式:克隆仓库时,把地址里的 github.com 换成对应的别名即可。

# 克隆个人仓库(用个人密钥)
git clone git@github-personal:你的用户名/repo.git

# 克隆工作仓库(用工作密钥)
git clone git@github-work:公司用户名/repo.git

验证哪个私钥在生效

可以用调试命令看 SSH 连接时用了哪个密钥文件:

# 测试GitHub,看调试信息里的 Offering public key 行
ssh -vT git@github.com

输出里会明确显示尝试使用的私钥路径,确认是否匹配预期。


三、生成多私钥的注意事项

  1. 绝对不要重名覆盖

    生成新密钥前先确认文件名,覆盖了旧私钥且没有备份的话,所有绑定该公钥的平台都会失去访问权限,只能重新上传新公钥。

  2. 文件权限要正确(macOS/Linux 重点)

    SSH 出于安全考虑,私钥文件权限过宽会直接拒绝使用。如果遇到 Bad owner or permissions 报错,执行:

    # 私钥仅自己可读可写
    chmod 600 ~/.ssh/id_ed25519_xxx
    # 公钥权限宽松些
    chmod 644 ~/.ssh/id_ed25519_xxx.pub
    # .ssh目录权限
    chmod 700 ~/.ssh
    

    Windows 系统一般无需手动改权限。

  3. 命名要有意义

    建议按「用途 + 账号」命名,比如 id_ed25519_github_personalid_ed25519_gitlab_work,避免时间久了分不清对应哪个账号。

  4. 公私钥必须配对

    每个 .pub 公钥只对应同名的私钥,不能混用。上传公钥时,一定要和私钥对应,否则会鉴权失败。

  5. 建议给重要私钥加密码(passphrase)

    生成时设置 passphrase,相当于给私钥再加一层密码。就算私钥文件意外泄露,没有密码也无法使用。

    嫌每次输入麻烦可以用 ssh-agent 缓存密码,配置后一次输入长期有效。

  6. 风险隔离

    多私钥的核心价值之一就是隔离风险:工作密钥泄露只影响工作账号,个人密钥不受影响;反之亦然。不要全平台共用一套密钥。


四、常见误区:生成时的输入信息能区分密钥吗?

不能。

生成密钥过程中,你输入的所有个人信息都不会用来区分密钥,也不参与密钥本身的生成:

  1. -C "邮箱" 只是注释

    后面的邮箱 / 字符串纯粹是备注,写什么都可以,哪怕两套密钥写完全一样的邮箱,也还是两套独立的密钥。它的作用只是方便你在平台上管理公钥时,知道这是哪台设备的。

  2. 姓名、邮箱不绑定密钥

    SSH 密钥是纯随机生成的数学对,和你的个人信息没有任何绑定关系。哪怕你随便填一个不存在的邮箱,也完全不影响使用。

  3. 真正区分不同密钥的唯一标识:文件名

    SSH 只认文件路径,你配置 IdentityFile 指定哪个文件,就用哪套密钥。和密钥内部的注释、邮箱毫无关系。


快速总结

  • 多私钥本质:多套独立的文件,靠文件名区分
  • 自动匹配:靠 ~/.ssh/config 按域名 / 别名对应私钥文件
  • 生成关键:-f 参数指定不同文件名,避免覆盖
  • 个人信息:仅作备注,不影响密钥功能和区分
posted @ 2026-07-09 17:08  韩熙隐ario  阅读(29)  评论(0)    收藏  举报