保護你的 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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - Raspberry Pi