如何安全地通过 SSH 连接到本地主机

LinuxLinuxBeginner
立即练习

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

简介

本教程将指导你学习安全外壳协议(Secure Shell,SSH)的基础知识,这是一种用于安全远程访问和通信的关键网络协议。你将学习如何配置安全的SSH设置,并实施最佳实践,以确保在远程访问本地系统时数据的机密性和完整性。

理解SSH基础知识

安全外壳协议(Secure Shell,SSH)是一种基础网络协议,它能在诸如互联网这种不安全的网络上实现计算机之间的安全通信和远程访问。SSH提供了一种安全的方式来连接远程系统、传输文件以及执行命令,确保所交换数据的机密性和完整性。

SSH的核心是采用客户端 - 服务器架构,其中客户端(你的本地机器)发起与服务器(远程系统)的连接。SSH协议使用强大的加密算法来保护通信通道,防止窃听并确保远程系统的真实性。

SSH认证过程是该协议的一个关键方面。SSH支持多种认证方法,包括基于密码的认证和公钥认证。公钥认证涉及使用加密密钥对,被认为更安全,因为它无需在网络上传输密码。

sequenceDiagram participant Client participant Server Client->>Server: 发起SSH连接 Server->>Client: 服务器的公钥 Client->>Server: 客户端的公钥 Server->>Client: 认证挑战 Client->>Server: 加密响应 Server->>Client: 认证成功 Client->>Server: 安全通信

SSH通信流程通常包括以下步骤:

  1. 客户端发起与服务器的SSH连接。
  2. 服务器向客户端提供其公钥以供验证。
  3. 客户端使用提供的公钥验证服务器的身份。
  4. 客户端和服务器协商加密算法并交换加密密钥以建立安全通信通道。
  5. 一旦建立安全连接,客户端就可以在服务器上执行命令、传输文件或执行其他远程操作。

SSH还支持其他功能,例如端口转发,它允许你为网络流量创建安全隧道;以及X11转发,它能使在远程系统上运行的图形应用程序的显示在本地机器上呈现。

对于需要安全访问和管理远程系统、传输敏感数据或在不同环境的项目中进行协作的系统管理员、开发人员和用户来说,理解SSH的基础知识至关重要。

配置安全的SSH设置

建立一个安全的SSH设置对于确保远程通信的机密性和完整性至关重要。在本节中,我们将探讨在Ubuntu 22.04系统上设置安全SSH环境所需的配置步骤。

安装OpenSSH服务器

OpenSSH服务器是负责处理传入SSH连接的核心组件。要在你的Ubuntu 22.04系统上安装OpenSSH服务器,请在终端中运行以下命令:

sudo apt-get update
sudo apt-get install openssh-server

这将安装必要的软件包并在你的系统上启用SSH服务器。

配置SSH服务器

SSH服务器的配置文件位于/etc/ssh/sshd_config。你可以编辑此文件来自定义服务器的行为并增强SSH设置的安全性。

以下是一些推荐的配置更改:

  1. 禁用root登录:为防止直接以root身份登录,将PermitRootLogin参数修改为no
  2. 启用公钥认证:将PubkeyAuthentication设置为yes以启用基于公钥的认证。
  3. 禁用密码认证:将PasswordAuthentication设置为no以禁用基于密码的认证并强制使用公钥认证。
  4. 指定允许的用户:使用AllowUsers指令指定允许连接到SSH服务器的用户列表。

做出更改后,保存配置文件并重启SSH服务:

sudo systemctl restart sshd

配置SSH客户端

在客户端,你可以配置SSH客户端以增强安全性并简化连接过程。SSH客户端配置文件位于~/.ssh/config

以下是一些推荐的配置选项:

  1. 指定SSH密钥:使用IdentityFile指令添加你的SSH私钥的路径。
  2. 设置默认用户:使用User指令指定SSH连接的默认用户。
  3. 启用SSH代理转发:将ForwardAgent设置为yes以启用SSH代理转发,这允许你在远程系统上使用本地SSH凭证。

通过遵循这些配置步骤,你可以设置一个安全的SSH环境,该环境利用强大的认证方法、限制访问并提供额外的安全功能。

实施SSH安全最佳实践

保护你的SSH设置对于保护你的系统和数据免受潜在威胁至关重要。在本节中,我们将探讨一些增强SSH实施安全性的最佳实践。

使用强加密算法

SSH支持多种加密算法,使用可用的最强算法来确保通信的机密性非常重要。在你的SSH服务器配置中,你可以通过修改以下参数来指定首选的密码、密钥交换算法和消息认证码(MAC):

Ciphers [email protected],[email protected],aes256-ctr,aes128-ctr
KexAlgorithms curve25519-sha256,[email protected],diffie-hellman-group-exchange-sha256
MACs [email protected],[email protected]

禁用弱加密算法

除了启用强加密外,禁用可能容易受到攻击的弱或已弃用的加密算法也至关重要。你可以通过在SSH服务器配置中设置以下参数来实现:

[email protected],[email protected],+aes256-ctr,+aes128-ctr,-*

此配置将只允许指定的强密码,并丢弃所有其他较弱的算法。

实施双因素认证

为了增加一层额外的安全性,你可以为SSH连接实施双因素认证(2FA)。一种流行的方法是使用谷歌身份验证器应用程序,它会生成基于时间的一次性密码(TOTP),用户除了提供SSH凭证外还必须提供该密码。

sudo apt update
sudo apt-get install libpam-google-authenticator
google-authenticator

启用2FA后,用户需要同时输入他们的SSH凭证和谷歌身份验证器应用程序生成的TOTP代码才能成功认证。

监控和审计SSH活动

定期监控和审计SSH活动可以帮助你检测并应对潜在的安全事件。你可以使用像syslogauditd这样的工具来记录SSH连接尝试、失败的登录以及其他相关事件。定期查看这些日志可以帮助你识别可疑活动并采取适当行动。

通过实施这些安全最佳实践,你可以显著增强SSH设置的整体安全性,并保护你的系统免受未经授权的访问和潜在攻击。

总结

SSH是用于安全远程访问和通信的强大工具,它提供强大的加密和认证机制来保护你的数据。通过理解SSH基础知识、配置安全设置并实施最佳实践,你可以确保远程连接和数据传输的安全性,并免受潜在威胁。本教程涵盖了SSH的关键方面,使你能够在本地系统管理和远程访问任务中有效且安全地利用这项技术。