如何使用授权密钥配置安全的 SSH 访问

LinuxLinuxBeginner
立即练习

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

简介

安全外壳协议(Secure Shell,SSH)是一种广泛使用的网络协议,它提供了一种安全且加密的方式,用于在不安全的网络上访问远程系统并与之交互。SSH 的核心是 SSH 密钥,这是用于身份验证和安全通信的加密密钥。本教程将指导你了解、生成和管理 SSH 密钥的过程,以增强你在 Linux 服务器上进行远程访问和管理任务时的安全性和便利性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/scp("Secure Copying") linux/RemoteAccessandNetworkingGroup -.-> linux/sftp("Secure File Transferring") linux/PackagesandSoftwaresGroup -.-> linux/openssl("OpenSSL") subgraph Lab Skills linux/env -.-> lab-409800{{"如何使用授权密钥配置安全的 SSH 访问"}} linux/ssh -.-> lab-409800{{"如何使用授权密钥配置安全的 SSH 访问"}} linux/scp -.-> lab-409800{{"如何使用授权密钥配置安全的 SSH 访问"}} linux/sftp -.-> lab-409800{{"如何使用授权密钥配置安全的 SSH 访问"}} linux/openssl -.-> lab-409800{{"如何使用授权密钥配置安全的 SSH 访问"}} end

理解安全外壳协议(Secure Shell,SSH)和 SSH 密钥

安全外壳协议(Secure Shell,SSH)是一种网络协议,它提供了一种安全且加密的方式,用于在诸如互联网这样不安全的网络上访问远程系统并与之交互。SSH 在基于 Linux 和 Unix 的操作系统中被广泛用于建立安全连接、执行命令以及在计算机之间传输文件。

SSH 的核心是 SSH 密钥,这是用于身份验证和安全通信的加密密钥。SSH 密钥成对出现:一个公钥和一个私钥。公钥与远程系统共享,而私钥则安全地保存在用户的本地机器上。

在建立 SSH 连接时,远程系统通过将公钥与私钥进行比对来验证用户身份。这个过程被称为公钥加密,它确保只有授权用户才能访问远程系统,为传统的基于密码的身份验证提供了一种强大且安全的替代方案。

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

与传统的基于密码的身份验证相比,使用 SSH 密钥有以下几个优点:

  1. 更高的安全性:SSH 密钥比密码安全得多,因为它们基于强大的加密算法,并且更不容易受到暴力攻击或密码猜测的影响。

  2. 便利性:SSH 密钥消除了记住和管理复杂密码的需要,使远程访问和管理更加方便。

  3. 自动化:SSH 密钥能够实现各种任务的自动化,例如脚本化部署、备份和系统管理,而无需手动输入密码。

  4. 改进的审计:基于 SSH 密钥的身份验证留下了清晰的审计记录,使得跟踪和监控远程系统上的用户活动更加容易。

为了有效地使用 SSH 密钥,你需要了解如何生成、管理和配置它们,以便安全地访问远程系统。以下部分将指导你完成这些过程。

生成和管理 SSH 密钥

为了有效地使用 SSH 密钥,你首先需要生成一个密钥对。ssh-keygen 命令用于在你的本地机器上创建一个新的 SSH 密钥对。这个命令会提示你指定密钥的位置和密码短语(可选)。

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

上述命令将生成一个 4096 位的 RSA 密钥对,并带有一个用于识别目的的注释(电子邮件地址)。

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

一旦生成了密钥对,公钥需要分发到你想要访问的远程系统,而私钥则安全地保存在你的本地机器上。公钥通常会被添加到远程服务器上的 authorized_keys 文件中,这使得服务器能够在 SSH 连接过程中验证你的身份。

妥善管理你的 SSH 密钥以确保其安全性和可用性非常重要。以下是一些管理 SSH 密钥的最佳实践:

  1. 安全存储私钥:将你的私钥妥善保管,最好存储在加密磁盘上或密码管理器中。
  2. 使用密码短语保护私钥:在生成 SSH 密钥时,考虑为你的私钥添加一个密码短语,以增加一层安全性。
  3. 谨慎分发公钥:只与你需要访问的远程系统共享你的公钥,并确保远程服务器上的 authorized_keys 文件配置正确。
  4. 定期审查和轮换密钥:定期审查你的 SSH 密钥,并在必要时进行轮换,特别是如果你怀疑某个密钥已被泄露。

通过了解如何生成和管理 SSH 密钥,你可以有效地保护你的远程访问和通信安全,确保你的数据和系统的机密性和完整性。

为安全访问配置 authorized_keys 文件

在生成和管理你的 SSH 密钥之后,下一步是在远程服务器上配置 authorized_keys 文件,以便使用你的公钥实现安全访问。authorized_keys 文件是位于远程服务器上用户账户的 .ssh 目录中的一个特殊文件,它存储了被授权访问系统的用户的公钥。

要配置 authorized_keys 文件,请按照以下步骤操作:

  1. 复制公钥:在你的本地机器上找到公钥文件(通常名为 id_rsa.pub)并复制其内容。

  2. 连接到远程服务器:使用现有的基于密码的 SSH 连接或其他安全方法连接到远程服务器。

  3. 创建或修改 authorized_keys 文件:导航到远程服务器上目标用户账户的 .ssh 目录。如果 .ssh 目录不存在,请使用以下命令创建它:

    mkdir -p ~/.ssh

    然后,使用文本编辑器打开 authorized_keys 文件(如果不存在则创建它):

    nano ~/.ssh/authorized_keys
  4. 添加公钥:将你的公钥内容(来自步骤 1)粘贴到 authorized_keys 文件中,确保将其添加在新的一行上。

  5. 保护 authorized_keys 文件:通过运行以下命令确保 authorized_keys 文件具有正确的权限:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    这些命令将目录和文件权限设置为仅所有者(目标用户账户)可访问。

配置完 authorized_keys 文件后,你应该能够使用基于 SSH 密钥的身份验证连接到远程服务器,而无需密码。

graph LR A[用户本地机器] -- 公钥 --> B[远程服务器] B -- 授权密钥 --> A

通过正确配置 authorized_keys 文件,你可以确保只有拥有正确私钥的授权用户才能访问远程系统,从而增强远程访问和通信的整体安全性。

总结

SSH 密钥是在 Linux 服务器上进行安全远程访问和身份验证的强大工具。通过理解公钥和私钥的概念,以及如何配置 authorized_keys 文件,你可以提高远程连接的安全性,实现自动化,并简化系统管理任务。本教程为你提供了在 Linux 环境中生成、管理和有效使用 SSH 密钥所需的知识和步骤。