保护你的 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_ed25519
和 id_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