保护你的 Raspberry Pi - SSH 协议安全

Jinku Hu 2022年5月18日
保护你的 Raspberry Pi - SSH 协议安全

本文将介绍几种方法来保护你与 Raspberry Pi 的 SSH 远程连接免受常见安全漏洞的影响。

强化 SSH 配置以保护 Raspberry Pi 上的远程访问

SSH 是访问远程主机以进行系统管理或其他任务的常用方法。

它通常用于远程访问本地网络上的 Raspberry Pi 设备。因此,必须保护 SSH 身份验证方法及其一些配置参数,以确保攻击者无法访问你的设备。

如果你刚刚听说过 SSH 远程访问协议,我们建议你先查看我们关于此主题的介绍文章,然后按照以下说明进行操作。

SSH 连接默认使用用户名/密码认证方案,攻击者可以暴力破解。因此,建议你更改为公钥身份验证,甚至强制所有会话。

首先,如果你没有用于将使用 SSH 访问 Raspberry Pi 的主机的公钥对,则需要生成一个公钥对。后者可以使用 ssh-keygen 命令行实用程序来完成,该实用程序作为 OpenSSH 工具包的一部分包含在大多数 Linux/BSD 系统中。

以下命令生成 ed25519 密钥对,它被认为是暂时的安全算法之一:

ssh-keygen -o -a 256 -t ed25519 -C "$(hostname)-$(date +'%d-%m-%Y')"

前面的命令将要求你指定密钥文件名,但如果你是第一次生成公钥,则可以按 Enter 使用默认名称。

它会提示你输入密码,如果你想让攻击者的工作更加困难,强烈建议你输入密码。指定的密码将用于在每个新的远程访问会话中验证你的身份。

请注意,此密码不会自动保存在文件中。因此,如果你将来需要使用生成的公钥对,你必须记住它。

默认情况下,生成的两个密钥文件位于 ~/.ssh/ 目录中,分别命名为 id_ed25519id_ed25519.pub。你不得与任何人共享 id_ed25519 的内容,但通常会将 id_ed25519.pub 内容复制到需要建立 SSH 连接的任何机器(例如,Raspberry Pi)。

接下来,你可以登录 Raspberry Pi 控制台并配置 SSH 服务器参数。请注意,以下说明假设你之前已在 Pi 上启用 SSH 服务器。

首先,我们需要复制 id_ed25519.pub. 的内容。到 Raspberry Pi 上的 /home/pi/.ssh/authorized_keys 文件。后一个文件在 Pi 上可能不存在,因此你可能需要手动创建它。

或者,你可以在你可以通过 SSH 访问 Pi 的主机上使用 scp 命令复制文件。

请注意,如果你在 ssh-keygen 命令提示符上指定了自定义密钥文件名,则应在以下命令中修改 Pi 的 IP 地址并更改源文件名。

scp ~/.ssh/id_ed25519.pub pi@192.168.0.12:/home/pi/.ssh/authorized_keys

成功复制后,你可以继续在 Raspberry Pi OS 上编辑 /etc/ssh/sshd_config 文件。此步骤将需要每个命令的 sudo 权限。

使用你熟悉的任何文本编辑器(使用 sudo)打开 sshd_config 文件,然后取消注释/插入以下行,如图所示并保存更改:

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys .ssh/authorized_keys2

PasswordAuthentication no
ChallengeResponseAuthentication no

配置文件修改后,你可以使用以下命令重新启动 sshd 服务以使更改生效:

sudo systemctl restart sshd.service

现在你可以使用 SSH 重新连接到 Pi,它应该会自动将你登录到系统中。但是,如果你在 ssh-keygen 命令期间指定了公钥密码,仍然会提示你输入公钥密码。

更改 Raspberry Pi OS 上 SSH 服务器的默认端口

另一个有用的安全措施是更改 SSH 的默认服务端口 22。你可以在我们在前面的步骤中编辑的 /etc/ssh/sshd_config 文件中修改默认端口。

这一次,我们将取消注释并更改以下行:

Port 60001

你可以从 49152-65535 范围内的私有服务端口中选择端口号。它不太可能与系统上运行的其他服务发生冲突。

请注意,前面的行通常已经包含在 sshd_config 文件中,但使用 # 字符作为前缀将其注释掉。你可以通过删除此前缀来取消注释其中的任何一个。

另外,不要忘记保存对文件的更改并使用 systemctl restart 命令重新启动 SSH 服务,如前面的步骤所示。此外,你需要将端口号添加到你的 ssh 命令中,以便从其他主机访问 Raspberry Pi,如下所示:

ssh pi@192.168.0.12 -p 600001
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - Raspberry Pi