如何配置 SSH 密钥认证

LinuxLinuxBeginner
立即练习

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

简介

本教程将引导你了解 SSH 密钥认证的基础知识,这是一种替代传统基于密码认证的安全方式。你将学习如何生成和管理 SSH 密钥对,以及实现基于 SSH 密钥的登录,以便更安全、便捷地访问你的 Linux/Unix 系统。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/UserandGroupManagementGroup -.-> linux/id("User/Group ID Displaying") linux/UserandGroupManagementGroup -.-> linux/set("Shell Setting") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/telnet("Network Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/scp("Secure Copying") subgraph Lab Skills linux/sudo -.-> lab-420729{{"如何配置 SSH 密钥认证"}} linux/id -.-> lab-420729{{"如何配置 SSH 密钥认证"}} linux/set -.-> lab-420729{{"如何配置 SSH 密钥认证"}} linux/export -.-> lab-420729{{"如何配置 SSH 密钥认证"}} linux/ssh -.-> lab-420729{{"如何配置 SSH 密钥认证"}} linux/telnet -.-> lab-420729{{"如何配置 SSH 密钥认证"}} linux/scp -.-> lab-420729{{"如何配置 SSH 密钥认证"}} end

SSH 密钥认证基础

SSH(安全外壳协议)是一种广泛用于安全远程访问 Linux/Unix 系统的协议。SSH 的关键特性之一是能够使用公钥加密技术进行用户认证,即 SSH 密钥认证。这种方法为传统的基于密码的认证提供了更安全的替代方案,实现无密码登录并增强系统安全性。

理解 SSH 密钥对

SSH 密钥认证依赖于密钥对的概念,密钥对由一个公钥和一个私钥组成。公钥与远程服务器共享,而私钥则安全地保存在客户端机器上。当你尝试连接到远程服务器时,服务器会通过要求你证明拥有相应的私钥来验证你的身份。

graph LR A[客户端] -- 公钥 --> B[服务器] B -- 挑战 --> A A -- 证明拥有私钥 --> B

SSH 密钥认证的优点

与传统的基于密码的认证相比,使用 SSH 密钥认证有几个优点:

  1. 增强的安全性:SSH 密钥比密码安全得多,因为它们极难被猜测或破解。
  2. 无密码登录:SSH 密钥认证允许你无需记住或输入密码即可登录到远程系统。
  3. 提高生产力:无需输入密码可以简化你的工作流程并提高生产力。
  4. 集中式密钥管理:SSH 密钥可以轻松管理和撤销,从而更好地控制对系统的访问。

生成 SSH 密钥

要使用 SSH 密钥认证,你首先需要生成一个密钥对。这可以通过在本地机器上使用 ssh-keygen 命令来完成。以下是一个示例:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

此命令将生成一个 4096 位的 RSA 密钥对,并将其与提供的电子邮件地址相关联。系统会提示你输入一个密码短语来保护你的私钥,强烈建议这样做以增加安全性。

生成密钥对后,可以将公钥复制到远程服务器以启用 SSH 密钥认证。

在服务器上配置 SSH 密钥认证

要在服务器上启用 SSH 密钥认证,你需要将公钥添加到用户主目录中的 authorized_keys 文件中。这可以通过手动将公钥追加到文件中,或使用 ssh-copy-id 命令来完成:

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

此命令将安全地将你的公钥复制到远程服务器并配置 authorized_keys 文件。

设置好 SSH 密钥认证后,你现在可以无需输入密码登录到远程服务器。

生成和管理安全的 SSH 密钥

生成并妥善管理 SSH 密钥对于维护系统安全至关重要。SSH 密钥有不同类型,每种类型都有其自身的优点和用例。在本节中,我们将探讨生成安全 SSH 密钥的过程,并讨论有效的密钥管理策略。

支持的 SSH 密钥类型

最常用的 SSH 密钥类型有:

  1. RSA:一种广泛采用的算法,提供高级别的安全性。RSA 密钥适用于一般用途。
  2. Ed25519:一种较新的算法,与 RSA 相比,具有更高的安全性和性能。建议现代系统使用 Ed25519 密钥。

生成 SSH 密钥时,选择合适的密钥类型和大小以匹配你的安全要求非常重要。

生成 SSH 密钥

你可以使用 ssh-keygen 命令生成 SSH 密钥。以下是创建 Ed25519 密钥对的示例:

ssh-keygen -t ed25519 -C "[email protected]"

此命令将创建一个新的 Ed25519 密钥对,并将其与提供的电子邮件地址相关联。系统会提示你输入一个安全的密码短语来保护你的私钥。

管理 SSH 密钥

有效的 SSH 密钥管理对于维护系统安全至关重要。以下是一些最佳实践:

  1. 安全存储密钥:将你的私钥存储在安全的位置,例如加密目录或硬件安全模块 (HSM)。
  2. 密钥轮换:定期轮换你的 SSH 密钥,以限制受损密钥的暴露风险。
  3. 密钥撤销:撤销不再使用或已受损的 SSH 密钥,以防止未经授权的访问。
  4. 密钥分发:谨慎管理你的公钥向授权系统和用户的分发。

自动化密钥管理

为了简化 SSH 密钥的管理,你可以考虑使用 ssh-agentkeychain 等工具。这些工具有助于自动化加载和管理你的私钥的过程,使日常使用 SSH 密钥更加轻松。

通过遵循生成和管理安全 SSH 密钥的最佳实践,你可以增强 Linux/Unix 系统的整体安全性,并保护它们免受未经授权的访问。

实现基于 SSH 密钥的登录

一旦你生成并安全地管理了 SSH 密钥,下一步就是配置你的系统以使用基于 SSH 密钥的认证。这个过程包括在远程服务器上设置授权密钥,并配置 SSH 客户端使用适当的私钥。

配置服务器

要在服务器上启用基于 SSH 密钥的登录,你需要将客户端的公钥添加到用户主目录中的 authorized_keys 文件中。这可以通过手动将公钥追加到文件中,或者使用 ssh-copy-id 命令来完成:

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

此命令将安全地将公钥复制到远程服务器并配置 authorized_keys 文件。

配置 SSH 客户端

在客户端,你需要确保 SSH 客户端被配置为使用用于该连接的适当私钥。这可以通过修改 SSH 客户端配置文件(Linux/Unix 系统上为 ~/.ssh/config)或在发起 SSH 连接时指定私钥来完成。

以下是一个配置文件条目的示例:

Host remote_host
    HostName remote_host
    User username
    IdentityFile ~/.ssh/id_rsa

此配置告诉 SSH 客户端在连接到 remote_host 时使用 id_rsa 私钥。

或者,你可以在发起 SSH 连接时指定私钥:

ssh -i ~/.ssh/id_rsa user@remote_host

自动化基于 SSH 密钥的登录

为了简化基于 SSH 密钥的登录过程,你可以考虑使用 ssh-agentkeychain 等工具。这些工具有助于自动化加载和管理你的私钥的过程,使日常使用 SSH 密钥更加轻松。

通过实现基于 SSH 密钥的登录,在使用远程 Linux/Unix 系统时,你可以享受增强的安全性、无密码访问和提高的生产力等好处。

总结

与传统的基于密码的认证相比,SSH 密钥认证提供了一种更安全、高效的方式来访问你的 Linux/Unix 系统。通过生成和管理安全的 SSH 密钥,你可以无需使用密码,提高生产力,并集中对系统的访问控制。本教程涵盖了设置 SSH 密钥认证的关键概念和步骤,使你能够增强远程访问工作流程的安全性和可用性。