保護你的 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