使用ssh-keygen生成新密钥对:完整教程
SSH是登录远程系统的安全方式,但通过交换公钥进行通信主机认证可以进一步提高安全性——即使用ssh-keygen命令生成密钥对。
本教程演示如何使用ssh-keygen命令创建新的公钥及其相关私钥。生成密钥后,您可以:
- 将公钥上传到远程服务器,实现自动化的无密码认证登录
- 在多个远程服务器上使用相同的公钥
- 在同一服务器上为不同功能使用多个公钥
SSH的GUI版本通常包含与命令行版本相同的功能。例如,PuTTYgen是ssh-keygen的GUI版本,用于PuTTY(Windows的SSH GUI实现)。现代操作系统,如Linux、macOS、Windows Server以及Windows 11,都包含OpenSSH的命令行版本。SSH是跨平台的,允许您从其他操作系统访问Linux、macOS和Windows设备。
本教程使用Windows PowerShell和Linux Bash命令行界面的OpenSSH示例。这些示例也适用于macOS版本的OpenSSH。
为什么生成SSH密钥?
您可以通过密码认证使用SSH,这相当安全。但是,使用公钥-私钥对进行认证是更安全的方法。
该过程很简单。首先,为本地计算机创建公钥-私钥对。接下来,将公钥文件复制到远程SSH服务器。私钥始终保留在本地工作站上。在密钥认证过程中,SSH验证两个密钥之间的关系以确保它们相关,从而提供比密码更安全的身份验证方式。
本教程解决三个用例:
- 配置SSH服务器通过将公钥文件从本地计算机复制到远程SSH服务器来识别SSH客户端
- 将公钥文件复制到远程服务器,使您能够使用相同的登录ID通过SSH远程访问多个系统
- 将多个与不同用户帐户关联的公钥复制到远程服务器,每个公钥具有不同权限级别
SSH工作原理
SSH使用公钥认证在SSH客户端和SSH服务器之间协商安全连接。您可以使用SSH在客户端和远程服务器之间建立临时连接,然后使用密码进行认证。
最佳安全实践是复制该指纹并根据远程服务器的公钥进行认证。一旦接受远程服务器的真实性,系统会将该服务器及其指纹添加到known_hosts文件中。
如何生成新SSH密钥
ssh-keygen命令生成用于认证到远程服务器的公钥-私钥对。默认情况下,ssh-keygen创建RSA密钥对,将公钥存储在名为.ssh/id_rsa.pub的文件中,私钥文件名为.ssh/id_rsa。
密钥生成从以下命令开始:
|
|
此示例中,ssh-keygen使用RSA公钥算法生成新的SSH密钥对。
ssh-keygen命令执行以下操作:
- 生成公钥对
- 响应"Enter passphrase"提示,您可以输入密钥密码来保护对私钥的访问
- 私钥存储在用户主目录的.ssh目录中名为id_rsa的文件中
- 公钥存在于同一目录中,文件名与私钥相同但扩展名为.pub
- SSH创建并显示密钥指纹和基于密钥指纹数据的randomart图像
文件类型和命名规范
ssh-keygen命令为本地计算机创建两个文件,一个公钥和一个私钥:
- id-rsa包含私钥,不应共享此文件
- id-rsa.pub包含公钥,可以共享并复制到其他系统
其他密钥类型的文件名默认使用~/.ssh/id_[密钥类型]的形式。
如何将密钥添加到ssh-agent
ssh-agent应用程序将私钥信息存储在内存中,使密钥可在每次连接时使用而无需输入密码。在开始一系列远程SSH连接之前手动启动代理应用程序。
生成密钥对后,可以使用ssh-add命令将私钥添加到Linux系统上的代理:
|
|
有三种方法可以简化ssh-agent的使用:
- 在SSH配置文件中添加或取消注释:AddKeysToAgent yes
- 将私钥添加到自动启动的密钥环服务
- 将命令添加到Bash shell配置文件中
如何将公钥复制到服务器
下一步是将新生成的公钥从本地系统复制到远程SSH服务器。当两个系统都在基于Unix的操作系统上使用OpenSSH时,可以使用ssh-copy-id命令安装密钥:
|
|
从Windows命令行复制公钥到服务器,使用以下命令:
|
|
如何将公钥复制到多个服务器
系统管理员、网络经理和网络安全专业人员通常需要使用相同的登录ID连接到许多不同的远程服务器。大型组织可以使用SSH密钥管理系统将公钥分发到远程服务器。
您也可以手动将公钥复制到您访问的所有服务器:
|
|
如何将多个公钥复制到服务器
网络和安全专业人员可能需要在同一远程服务器上使用具有不同权限的不同身份。当向同一远程服务器添加多个公钥时,公钥文件名不同,必须在运行ssh命令时指定:
|
|
SSH密钥管理最佳实践
使用以下SSH密钥管理最佳实践:
- 发现、清点和记录所有密钥
- 撤销不必要的密钥
- 选择更强的加密算法以提高安全性
- 仅为需要的人启用基于密钥的认证
- 定期轮换和更改SSH密钥
- 使用密码保护私钥
- 在SSH配置文件中禁用基于密码的认证
- 禁用SSH配置文件中的root认证
- 管理Linux、macOS和Windows系统的基于密钥的认证
- 记录和配置自动化配置过程的基于密钥的认证
实施SSH基于密钥的认证并遵循这些最佳实践有助于确保手动和自动化任务的SSH部署安全且功能正常,即使在跨平台环境中也是如此。