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