如何管理多个 SSH 密钥对

2025-05-27

如何管理多个 SSH 密钥对

大多数开发人员会使用 SSH 密钥而不是密码与资源进行交互。我最近无意中听到有人说他所有账户都使用同一个 SSH 密钥,从安全角度来看,这不是一个好主意。一个密钥被授权的地方越多,它的价值就越高。如果密钥被泄露,更多的目标就会面临风险。我可能拥有多个密钥对还有其他原因:

  • 共享相同密钥的团队资源
  • 不支持最新 ed25519 加密算法的旧系统
  • 为每位咨询客户提供单独的钥匙

当我最初开始在个人电脑上管理多个 SSH 密钥/密码组合时,我从各种来源学习了最佳实践。我将这些信息记录下来,以便其他人参考。我目前使用的操作系统是 MacOS,但这些说明应该适用于任何 *nix 系统。Atlassian建议用户每年更换一次 SSH 密钥以确保安全。遵循以下步骤将确保您能够做到。

第一步:生成新密钥

打开终端并导航到 ~/.ssh 以生成新的 SSH 密钥:

ssh-keygen -t ed25519 -f ~/.ssh/key_name -C "name@example.com"
Enter fullscreen mode Exit fullscreen mode

每个标志的含义如下:

  • -t 指定生成密钥的算法。
  • -f 为密钥指定一个自定义名称(假设您位于 ~/.ssh 目录中),如果密钥是路径形式,则指定一个备用位置。key_name 是密钥的名称。请尽可能具体地指定。
  • -C 是包含注释的选项。注释可以是任意形式,但通常采用“用户@主机”(密钥生成者)的格式。

我总是使用一个具体且对我有意义的密钥名称。从长远来看,这会使密钥管理更加容易。出现提示时,您应该输入密码。

第二:创建known_hosts文件

完成第一步后,会创建两个文件:key_name 和 key_name.pub。第一个是您的私钥,第二个(扩展名为 .pub)是您的公钥。

为每个帐户创建一个 known_hosts 文件,因为当您拥有多个密钥时,它可以更轻松地诊断问题。理想情况下,此文件的名称应与密钥名称足够相似,以免日后混淆。

touch known_hosts_keyname 
Enter fullscreen mode Exit fullscreen mode

第三:设置配置文件

配置文件为每个主机设置选项。如果配置文件尚不存在,请创建它,然后打开进行编辑。为了保持视觉整洁,并避免键列表随着时间的推移而变长而产生混淆,我为每个键都添加了标签。在行首使用 # 来标记每个主机,并创建注释。下图中的文本可在此处找到,以节省您的输入时间。

配置

以下是每行含义的详细说明:

  • Host是一个模式匹配器,用于区分这些配置集。请将其与 HostName 保持一致,这样它就可以正确匹配连接中的主机,而无需进行其他指定。
  • HostName行中的 URL是仓库所在的基本 URL。例如,如果你在 GitHub 上有一个个人帐户,并且有个人项目,那么 URL 就是 github.com。
  • 基于 git 的系统的用户为 git。如果您连接到其他系统,则 User 的值会有所不同(例如,连接到 Amazon AWS EC2 实例时,User 的值会为 ec2-user)。
  • IdentityFile询问我们创建的身份密钥的位置。在此处输入相应的路径。
  • AddKeysToAgent允许将身份验证期间使用的私钥添加到正在运行的 ssh-agent
  • UseKeychain(仅限 macOS)允许计算机在每次重启时记住密码
  • UserKnownHostsFile指定了使用该配置文件时所连接的所有主机的确切存储位置。请在此处提供相应的路径,并选择一个唯一的已知主机文件名(请参阅上面的步骤 2),以便日后更轻松地进行故障排除和密钥维护。
  • IdentitiesOnly指定只能使用提供的密钥来连接主机,即使 ssh-agent 等其他服务提供了可供使用的密钥。

第四:向 ssh 代理添加密钥

如果使用了密码,请将密钥添加到 ssh 代理。如果没有使用密码,请跳至下一步。在终端中启动 ssh 代理:

eval "$(ssh-agent -s)"
Enter fullscreen mode Exit fullscreen mode

在终端中向代理添加私钥:

ssh-add --apple-use-keychain ~/.ssh/key_name
Enter fullscreen mode Exit fullscreen mode

请注意,--apple-use-keychain 选项仅适用于 Mac 上的钥匙串访问。(在 Monterey 之前的 MacOS 版本中,请使用 -K 而不是 --apple-use-keychain)。

第五:收尾

如果您使用 Bitbucket 或 Github 之类的服务,请将公钥添加剪贴板并将其粘贴到相应的帐户(即 Bitbucket)中:

cat key_name.pub | pbcopy 
Enter fullscreen mode Exit fullscreen mode

最后在终端中验证配置:

ssh -T git@bitbucket.org 
Enter fullscreen mode Exit fullscreen mode

有了多个密钥,我可以根据需要创建新密钥,以确保每个连接的安全。如果某个密钥被盗用,我只需担心更改该密钥即可。我的配置文件让我可以轻松使用多个密钥。

参考
OpenSSH 文档
Bitbucket 文档
Github 文档

文章来源:https://dev.to/josephmidura/how-to-manage-multiple-ssh-key-pairs-1ik
PREV
React 动画入门
NEXT
Phoenix & Elixir 学习计划