SSH密钥生成与管理完整教程

本文详细介绍了如何使用ssh-keygen命令生成SSH密钥对,包括密钥创建、复制公钥到远程服务器、管理多个密钥对以及SSH密钥管理最佳实践。内容涵盖Windows、Linux和macOS系统的操作示例,帮助实现安全的无密码认证和自动化连接。

使用ssh-keygen生成新密钥对:完整教程

SSH是登录远程系统的安全方式,但通过使用公钥交换进行通信主机认证,可以进一步提高其安全性——即使用ssh-keygen命令生成密钥对。

本教程演示如何使用ssh-keygen命令创建新的公钥及其相关私钥。生成密钥后,您可以执行以下操作:

  • 将公钥上传到远程服务器,实现自动化和认证的无密码登录
  • 在多个远程服务器上使用相同的公钥
  • 在同一服务器上为不同功能使用多个公钥

SSH的GUI版本通常包含与命令行版本相同的功能。例如,PuTTYgen是用于PuTTY的ssh-keygen的GUI版本,PuTTY是Windows的SSH GUI实现。现代操作系统,如Linux、macOS和Windows Server,以及Windows 11,都包含OpenSSH的命令行版本。

为什么生成SSH密钥?

您可以在没有密钥对的情况下使用SSH,通过密码进行认证,这相当安全。但是,使用公钥-私钥对进行认证是更安全的方法。

该过程很简单。首先,为本地计算机创建公钥-私钥对。接下来,将公钥文件复制到远程SSH服务器。私钥始终保留在本地工作站上。

如何生成新的SSH密钥

ssh-keygen命令生成用于认证到远程服务器的公钥-私钥对。大多数SSH实现都包含它。

默认情况下,ssh-keygen创建RSA密钥对。它将公钥存储在名为.ssh/id_rsa.pub的文件中,将私钥存储在名为.ssh/id_rsa的文件中。

密钥生成从以下命令开始:

1
$ ssh-keygen -t rsa

在此示例中,ssh-keygen使用RSA公钥算法生成新的SSH密钥对。

文件类型和命名规范

ssh-keygen命令为本地计算机创建两个文件,一个公钥和一个私钥。在这种情况下,两个文件是:

  • id-rsa包含私钥。除非在您的控制下,否则不应共享此文件或将其复制到任何远程系统
  • id-rsa.pub包含公钥。您可以共享此文件并将其复制到其他系统,特别是当您计划使用SSH登录这些系统时

如何将密钥添加到ssh-agent

ssh-agent应用程序将私钥信息存储在内存中,使得无需为每个连接输入密码即可使用密钥。

生成密钥对后,可以使用ssh-add命令将私钥添加到Linux系统上的代理。使用密钥文件作为参数。

1
ssh-add ~/.ssh/{key-file-name}

如何将公钥复制到服务器

下一步是将新生成的公钥从本地系统复制到远程SSH服务器。当两个系统都在基于Unix的操作系统(包括Linux或macOS)上使用OpenSSH时,可以使用ssh-copy-id命令安装密钥。

要从Windows命令行将公钥复制到服务器,请使用以下命令:

1
PS c:> type $env:USERPROFILE\.ssh\id_rsa.pub | ssh alice@192.0.2.16 "cat >> .ssh/authorized_keys"

如何将公钥复制到多个服务器

系统管理员、网络经理和网络安全专业人员通常需要使用相同的登录ID连接到许多不同的远程服务器。

您可以手动将公钥复制到您访问的所有服务器。您将为每个远程服务器发出与上述相同的命令来复制公钥。

如何将多个公钥复制到服务器

网络和安全专业人员可能需要在同一远程服务器上使用具有不同权限的不同身份。

当向同一远程服务器添加多个公钥时,公钥文件名不同,并且必须在运行ssh命令时指定。

SSH密钥管理最佳实践

使用以下SSH密钥管理最佳实践来简化现有SSH基础架构,并作为更广泛自动化计划的一部分进行改进:

  • 发现、清点和记录所有密钥
  • 撤销不必要的密钥
  • 选择更强的加密算法以提高安全性
  • 仅对需要的人启用基于密钥的认证
  • 定期轮换和更改SSH密钥
  • 使用密码保护私钥
  • 在SSH配置文件中禁用基于密码的认证
  • 在SSH配置文件中禁用root认证
  • 管理Linux、macOS和Windows系统的基于密钥的认证
  • 为自动化配置过程(如Ansible)记录和配置基于密钥的认证

实施SSH基于密钥的认证并遵循这些最佳实践有助于确保手动和自动化任务的安全功能SSH部署,即使在跨平台环境中也是如此。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计