如何生成和管理安全的 SSH 密钥

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程全面介绍了SSH密钥,涵盖了生成安全SSH密钥和配置基于密钥的认证的过程。与传统的基于密码的认证相比,SSH密钥提供了一种更安全的替代方案,能够实现对Linux/Unix系统的高效、简化的远程访问。在本指南结束时,你将掌握生成和配置SSH密钥的知识和技能,以增强远程操作的安全性和便利性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/scp("Secure Copying") linux/RemoteAccessandNetworkingGroup -.-> linux/sftp("Secure File Transferring") subgraph Lab Skills linux/ssh -.-> lab-398380{{"如何生成和管理安全的 SSH 密钥"}} linux/scp -.-> lab-398380{{"如何生成和管理安全的 SSH 密钥"}} linux/sftp -.-> lab-398380{{"如何生成和管理安全的 SSH 密钥"}} end

SSH密钥简介

SSH(安全外壳协议)密钥是一种加密认证形式,允许计算机之间进行安全通信和远程访问,特别是在Linux/Unix环境中。与传统的基于密码的认证相比,SSH密钥提供了一种更安全的替代方案,因为它们依赖于一对加密密钥——公钥和私钥。

公钥会与你希望连接的远程服务器或计算机共享,而私钥则安全地保存在你的本地机器上。当你尝试连接到远程系统时,你的客户端软件(如SSH客户端)会使用私钥来验证你的身份,从而无需密码。

graph LR A[本地机器] -- 公钥 --> B[远程服务器] B -- 私钥 --> A

这种基于SSH密钥的认证过程有几个优点:

  1. 增强安全性:SSH密钥比密码安全得多,因为它们几乎不可能被猜测或破解,能更有效地抵御未经授权的访问。
  2. 简化访问:一旦配置好SSH密钥,你就可以无需每次都输入密码来连接远程系统,使过程更加高效和便捷。
  3. 自动化工作流程:SSH密钥支持各种任务的自动化,如远程脚本执行、文件传输和系统管理,无需人工干预。

要有效地使用SSH密钥,你需要生成一对安全的密钥,并配置远程系统以接受你的公钥。以下部分将指导你完成生成和配置SSH密钥的过程。

生成安全的SSH密钥

要生成一对安全的SSH密钥,你可以使用大多数Linux/Unix系统上都有的ssh-keygen命令。该命令允许你创建不同类型的SSH密钥,包括RSA、ECDSA和Ed25519,每种密钥都有不同级别的安全性和性能特征。

## 生成一个RSA SSH密钥对
ssh-keygen -t rsa -b 4096 -C "[email protected]"

## 生成一个ECDSA SSH密钥对
ssh-keygen -t ecdsa -b 521 -C "[email protected]"

## 生成一个Ed25519 SSH密钥对
ssh-keygen -t ed25519 -C "[email protected]"

-t选项指定密钥类型,而-b选项设置密钥大小(以位为单位)。-C选项允许你为密钥添加注释,这有助于识别。

生成密钥时,系统会提示你输入一个密码短语。强烈建议使用强密码短语来保护你的私钥,因为这增加了一层额外的安全性。每当你使用私钥进行认证时,都需要输入密码短语。

graph LR A[本地机器] -- 公钥 --> B[远程服务器] B -- 私钥 --> A

生成密钥后,公钥将存储在~/.ssh/id_rsa.pub文件(用于RSA)、~/.ssh/id_ecdsa.pub文件(用于ECDSA)或~/.ssh/id_ed25519.pub文件(用于Ed25519)中。私钥将存储在相应的id_rsaid_ecdsaid_ed25519文件中。

务必妥善保管私钥,切勿与任何人共享。另一方面,公钥可以与你希望连接的远程系统共享。

配置基于SSH密钥的认证

生成SSH密钥后,下一步是配置远程系统以接受你的公钥进行认证。此过程称为设置基于SSH密钥的认证,它允许你无需密码即可连接到远程系统。

要配置基于SSH密钥的认证,请执行以下步骤:

  1. 将公钥复制到远程系统

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host

    此命令会将你的公钥追加到远程系统上的~/.ssh/authorized_keys文件中,使SSH服务器能够识别你的密钥以进行认证。

  2. 验证配置

    ssh user@remote_host

    运行此命令后,你应该能够无需输入密码即可登录到远程系统。相反,SSH客户端将使用你的私钥来验证你的身份。

graph LR A[本地机器] -- 公钥 --> B[远程服务器] B -- 私钥 --> A A -- SSH连接 --> B

为了进一步增强基于SSH密钥的认证的安全性,你可以使用以下选项配置SSH客户端和服务器:

选项 描述
PasswordAuthentication no 在SSH服务器上禁用基于密码的认证,强制使用基于密钥的认证。
PubkeyAuthentication yes 在SSH服务器上启用公钥认证。
AuthorizedKeysFile.ssh/authorized_keys 指定SSH服务器上授权密钥文件的位置。
IdentityFile ~/.ssh/id_rsa 指定SSH客户端上私钥文件的位置。

通过在SSH客户端和服务器配置文件中配置这些选项,你可以确保使用更强大、更便捷的基于密钥的认证方法来保护你的SSH连接安全。

总结

在Linux/Unix环境中,SSH密钥是用于安全远程访问和通信的强大工具。通过生成一对加密密钥——公钥和私钥,你可以建立一个更安全、高效的认证过程,无需使用密码。本教程指导你完成了使用ssh-keygen命令生成安全SSH密钥的步骤,以及在远程系统上配置基于密钥的认证的过程。掌握了这些技能后,你现在可以利用SSH密钥的优势,包括增强的安全性、简化的访问和自动化工作流程,来提升你的远程操作,并加强Linux/Unix基础设施的整体安全性。