如何在 Linux 上使用 Dropbear SSH 密鑰遠程解鎖 LUKS


出於安全和隱私的原因,Linux 使用 Linux 磁盤統一密鑰格式 (LUKS) 來加密分區和整個磁盤。通過在引導時輸入密碼來解鎖受 LUKS 保護的磁盤。必須在啟動時或使用 Linux 遠程控制台在計算機前打開加密磁盤。但是,如果您的系統位於地下室、遠程數據中心/辦公室或二樓辦公室,您將無法解鎖和啟動您的 Linux 機器。要解決此問題,請使用 Dropbear SSH 服務器用於 Debian 或 Ubuntu 或其他通過 SSH 使用 LUKS 加密的 Linux 發行版。讓我們來看看 如何在 Linux 上使用 Dropbear SSH 密鑰解鎖 LUKS 在啟動時。

為什麼要通過 Dropbear ssh 使用和解鎖 LUKS 加密的根磁盤和引導磁盤?

  • 非常適合遠程 Linux 服務器或云服務器
  • 即使您沒有遠程 KVM 控制台,您仍然可以啟動和訪問您的設備。
  • 這意味著您可以在沒有鍵盤和屏幕的情況下啟動 Linux 服務器。

什麼是 Dropbear SSH 服務器?

Dropbear 是一個免費的開源 SSH 服務器創建 它專門針對資源要求低的嵌入式 Linux 和 Unix 系統。 實現安全外殼 (SSH) 協議的第 2 版。支持用於密鑰交換的 RSA 和橢圓曲線加密。 Dropbear 支持 OpenSSH ~/.ssh/authorized_keys 公鑰認證。 假設您有 Debian 或 Ubuntu Linux 並安裝了 LVM 和 LUKS。這是我的設置。還有軟件RAID-1。

  1. /boot/efi – 系統啟動分區是在主板運行 UEFI 而不是 BIOS 時創建的。
  2. /dev/md0 – Linux /boot/(RAID-1 /dev/md0 掛載在 /boot/)目錄僅包含引導過程中所需的文件。引導加載程序初始化一個名為 initrd 的 ramdisk。 使用 update-initramfs 將 Dropbear ssh 服務器掛接到引導過程。 運行 ls 命令以顯示 /boot/ 目錄。你應該看到這樣的文件:
    ls -1 /boot/*$(uname -r)*
    /boot/config-4.19.0-13-amd64
    /boot/initrd.img-4.19.0-13-amd64
    /boot/System.map-4.19.0-13-amd64
    /boot/vmlinuz-4.19.0-13-amd64

    vmlinuz 是我的 Linux 內核。 initrd 包含 Linux 驅動程序、RAID 支持、Dropbear ssh 服務器和其他用於引導 Linux 系統的東西。
  3. /dev/md1 – 我的 LUKS 加密系統 RAID-1 設備。 它有兩個 LVM 成員。 一個用於交換,一個用於根分區。這意味著除了 /boot/efi 和 /boot/ 分區之外的所有數據都被加密。 您還可以加密 /boot/。請注意,安全模型和威脅模型是不同的。因此,建議在啟動過程中使用額外的保護措施,例如 BIOS/UEFI 密碼、保護家庭/辦公室/數據中心訪問以及在需要時啟用 FDE。

在 Ubuntu/Debian 上遠程解鎖 LUKS 加密根的示例設置

運行 lsblk 命令以顯示當前磁盤、RAID、加密和 LVM 信息。
# lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT

您還可以使用 cat 命令來識別加密分區。
sudo cat /etc/crypttab

這是我看到的:

md1_crypt UUID=45b8c33e-a710-4062-b98f-a32a45c9d947 none luks,discard

這是我的 Linux 操作系統版本和生產中的 Linux 內核版本:
lsb_release -a && uname -mrs

示例輸出:

No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 10 (buster)
Release:	10
Codename:	buster
Linux 4.19.0-13-amd64 x86_64

足夠的。讓我們動手,看看如何通過 Dropbear SSH 遠程解密 LUKS 設備。

在 Linux 上使用 Dropbear SSH 密鑰解鎖 LUKS 的步驟

安裝 Dropbear ssh 以啟用對使用 LUKS 加密的 Debian 10.x 和 Ubuntu 20.04 LTS 服務器的遠程解鎖。

第 1 步 – 在 Debian 或 Ubuntu 上安裝 Dropbear

運行 apt 命令/apt-get 命令,如下所示:
## First, apply Debian security patches ##
sudo apt update
sudo apt upgrade
sudo apt install dropbear-initramfs

筆記:您可能會看到類似於以下內容的警告:“dropbear: WARNING: Invalid authorized_keys file. Unable to remote unlock cryptroot via SSH!”請忽略。

第 2 步 – 配置 Dropbear 以解鎖 LUKS 加密系統

使用 su 或 sudo 命令成為 root 用戶。
sudo -i

使用 CD 輸入 /etc/dropbear-initramfs cd 命令
cd /etc/dropbear-initramfs

編輯配置文件。
# vim config

編輯/更新 DROPBEAR_OPTIONS 如下:
DROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -s"

選項是:

  1. -我 180 :如果 180 秒內沒有發送或接收流量,則斷開會話。
  2. -j : 禁用 ssh 本地端口轉發。
  3. -k :還禁用遠程端口轉發。
  4. -p 2222 : 在指定地址和 TCP 端口上監聽 Dropbear ssh 服務器。 如果只指定一個端口,如 2222,它會監聽所有地址。您最多可以指定 10 個(如果未指定,則默認為 22 個)。
  5. -s :禁用密碼登錄。在 Linux/Unix 系統上設置 SSH 密鑰進行身份驗證以減少攻擊面。

第 3 步 – 配置靜態 IP

如果您的地下室有本地 Linux 服務器,您可能能夠通過 DHCP 服務器確定將哪個 IP 分配給 Dropbox,這是默認行為。但是,數據中心或云中的遠程服務器需要公共 IP 地址,就像常規的 OpenSSH 會話一樣。以下是設置公共 IP 地址的方法: 編輯 /etc/initramfs-tools/initramfs.conf。
# vim /etc/initramfs-tools/initramfs.conf

在啟動時將靜態 IP 信息添加到 Dropbear ssh。
IP=192.168.2.19::192.168.2.254:255.255.255.0:debian

在哪裡:

  1. 知識產權= – 啟用靜態 IP 配置
  2. :: – 字段分隔符
  3. 192.168.2.19 – IPv4
  4. 192.168.2.254 – 網關
  5. 255.255.255.0 – 網絡掩碼
  6. 德維安 – CPU 名稱

完成 句法 以下是 IPv4 和 IPv6 的靜態 IP 設置:

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:
   <dns-server-0-ip>:<dns-server-1-ip>:<ntp0-ip>

第 4 步 – 更新或構建 initramfs 映像

每當您更改 /etc/initramfs-tools/initramfs.conf 或 /etc/dropbear-initramfs/config 時,使用 update-initramfs 腳本來維護本地計算機上的 initramfs 映像。
sudo update-initramfs -u
sudo update-initramfs -u -v

-u 選項更新現有的 initramfs,而 -v 選項增加了在選定操作期間提供的信息量。

第 5 步 – 創建用於登錄的 SSH 密鑰

讓我們回到桌面客戶端,例如 macOS、*BSD 或基於 Linux 的發行版。打開終端並輸入以下命令以設置基於 SSH 公鑰的身份驗證。
{client}$ ssh-keygen -t rsa -f ~/.ssh/intel_nuc_debian

將桌面客戶端公鑰 ~/.ssh/intel_nuc_debian.pub 複製到 /etc/dropbear-initramfs/authorized_keys,每行一個。
{client}$ cat ~/.ssh/intel_nuc_debian.pub

如果您啟用了 root ssh 訪問,請嘗試:
{client}$ cat ~/.ssh/intel_nuc_debian.pub | ssh [email protected] "cat >> /etc/dropbear-initramfs/authorized_keys"

對於普通用戶,請嘗試:
{client}$ scp ~/.ssh/intel_nuc_debian.pub [email protected]:~/key.pub
{client}$ ssh [email protected]
{server}$ sudo -i
{server}# cat /home/vivek/key.pub >> /etc/dropbear-initramfs/authorized_keys
{server}# rm /home/vivek/key.pub
{server}# exit
{server}$ exit

更新您的 initrd:
{server}$ sudo update-initramfs -u

第 6 步 – 在啟用 LUKS 遠程解鎖的情況下測試您的 Linux 服務器

到目前為止,一切都很好。 我為我的 initramfs 安裝了 Dropbear ssh。使用靜態 IP 配置 Dropbear initramfs。 安裝 ssh 密鑰後,重新啟動 Linux 服務器。
{server}$ sudo reboot

使用 ssh 解鎖 LUKS 卷

使用 ping 命令檢查連接性。
{client}$ ping 192.168.2.19

讓我們使用 ssh 命令登錄。
{client}$ ssh -i ~/.ssh/intel_nuc_debian -p 2222 -o "HostKeyAlgorithms ssh-rsa" [email protected]

要解鎖它,請運行:
# cryptroot-unlock

無需本地訪問即可解鎖 LUKS 卷並遠程使用 SSH

添加

這將在 Dropbear ssh 服務器的幫助下使用 ssh 遠程解鎖您的 LUKS 磁盤。我們建議設置 OpenSSH 配置文件以避免鍵入長 ssh 命令。

這個條目是 裡面 Linux Unified Key Setup (LUKS) 是一個磁盤加密教程 系列。閱讀本系列的其餘部分。

  1. 使用 LUKS 進行 Linux 硬盤加密
  2. 在 Linux 上備份和恢復 LUKS 標頭
  3. 在 Linux 上更改 LUKS 磁盤加密密碼
  4. 在 Linux 上使用 Dropbear SSH 密鑰遠程解鎖 LUKS
  5. 在 Linux 上使用 Keyfile 添加/啟用 LUKS 磁盤加密