Невозможно подключиться к SSH-серверу dropbear для удаленной разблокировки зашифрованного корневого раздела LUKS на облачном сервере Arch Linux.
Я намеревался установить зашифрованную Linux-систему LUKS Arch на облачном сервере. Я установил последнюю версию Arch Linux в зашифрованный LUKS раздел, настроил initramfs (установленные перехватчики сборки), затем установил загрузчик grub и настроил его для расшифровки cryptroot. Я использовал это руководство из официальной вики Arch Linux. Теперь я могу загрузиться в зашифрованную систему, используя консоль облачного провайдера и введя пароль для зашифрованного раздела. Все работает отлично, я также могу подключиться к серверу через SSH, как и ожидалось.
Теперь я хочу иметь возможность удаленно разблокировать корневой раздел без использования консоли облачного провайдера, а вместо этого использовать SSH. У меня тут проблемы. Я следовал этому руководству . Точные шаги, которые я сделал:
Установленные пакеты:
pacman -S busybox dropbear mkinitcpio-dropbear mkinitcpio-utils mkinitcpio-netconf
Сгенерировали пару ключей на клиенте для разблокировки LUKS:
ssh-keygen -t rsa -f unlock_luks
Загрузил открытый ключ (
unlock_luks.pub
) на сервер и переместил его в/etc/dropbear/root_key
Восстановлены ключи OpenSSH в формате PEM.
[root@host ~]# rm /etc/ssh/ssh_host_* [root@host ~]# ssh-keygen -A -m PEM ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
Ключ OpenSSH rsa преобразован в ключ SSH dropbear:
[root@host ~]# dropbearconvert openssh dropbear /etc/ssh/ssh_host_rsa_key /etc/dropbear/dropbear_rsa_host_key Key is a ssh-rsa key Wrote key to '/etc/dropbear/dropbear_rsa_host_key' [root@host ~]# dropbearconvert openssh dropbear /etc/ssh/ssh_host_ed25519_key /etc/dropbear/dropbear_ed25519_host_key Key is a ssh-ed25519 key Wrote key to '/etc/dropbear/dropbear_ed25519_host_key' [root@host ~]# dropbearconvert openssh dropbear /etc/ssh/ssh_host_ecdsa_key /etc/dropbear/dropbear_ecdsa_host_key Key is a ecdsa-sha2-nistp256 key Wrote key to '/etc/dropbear/dropbear_ecdsa_host_key' [root@host ~]# dropbearconvert openssh dropbear /etc/ssh/ssh_host_dsa_key /etc/dropbear/dropbear_dsa_host_key Error: unable to create key structure Error reading key from '/etc/ssh/ssh_host_dsa_key'
Вставленные крючки
netconf dropbear encryptssh
доfilesystems
вHOOKS
из/etc/mkinitcpio.conf
. Теперь это выглядит так:HOOKS=(base udev autodetect modconf block mdadm_udev lvm2 netconf dropbear encryptssh filesystems keyboard fsck)
Установлен и настроен GRUB:
pacman -S grub grub-install /dev/sda
Установите эти параметры в
/etc/default/grub
(это зашифрованный раздел LUKS):GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda3:cryptroot ip=dhcp" GRUB_ENABLE_CRYPTODISK=y
Конфигурация сети на моем сервере использует DHCP, поэтому я используюip=dhcp
также.
Сгенерированный файл конфигурации grub:
grub-mkconfig -o /boot/grub/grub.cfg
echo "cryptroot /dev/sda3 none luks" >> /etc/crypttab
(/dev/sda3
это зашифрованный раздел LUKS)Восстановленный initramfs:
mkinitcpio -p linux
. Выход:==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default' -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img ==> Starting build: 5.18.16-arch1-1 -> Running build hook: [base] -> Running build hook: [udev] -> Running build hook: [autodetect] -> Running build hook: [modconf] -> Running build hook: [block] ==> WARNING: Possibly missing firmware for module: xhci_pci -> Running build hook: [mdadm_udev] -> Running build hook: [lvm2] -> Running build hook: [netconf] -> Running build hook: [dropbear] Key is a ssh-rsa key Wrote key to '/etc/dropbear/dropbear_rsa_host_key' Error: unable to create key structure Error reading key from '/etc/ssh/ssh_host_dsa_key' Key is a ecdsa-sha2-nistp256 key Wrote key to '/etc/dropbear/dropbear_ecdsa_host_key' dropbear_rsa_host_key : SHA256:J9v2M8Lso02myd7Ah5Gk2itcNOq0dWVyARVSpBzx8R0 dropbear_ecdsa_host_key : SHA256:1c9URey3Z3JnUAWXKGFIVruzcWnhBtiqiQsEe/TdLXM -> Running build hook: [encryptssh] ==> WARNING: Possibly missing firmware for module: qat_4xxx -> Running build hook: [filesystems] -> Running build hook: [keyboard] -> Running build hook: [fsck] ==> Generating module dependencies ==> Creating zstd-compressed initcpio image: /boot/initramfs-linux.img ==> Image generation successful ==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback' -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect ==> Starting build: 5.18.16-arch1-1 -> Running build hook: [base] -> Running build hook: [udev] -> Running build hook: [modconf] -> Running build hook: [block] ==> WARNING: Possibly missing firmware for module: qed ==> WARNING: Possibly missing firmware for module: qla2xxx ==> WARNING: Possibly missing firmware for module: bfa ==> WARNING: Possibly missing firmware for module: qla1280 ==> WARNING: Possibly missing firmware for module: wd719x ==> WARNING: Possibly missing firmware for module: aic94xx ==> WARNING: Possibly missing firmware for module: xhci_pci -> Running build hook: [mdadm_udev] -> Running build hook: [lvm2] -> Running build hook: [netconf] ==> WARNING: Possibly missing firmware for module: cfg80211 ==> WARNING: Possibly missing firmware for module: wcn36xx ==> WARNING: Possibly missing firmware for module: mt7603e ==> WARNING: Possibly missing firmware for module: rsi_usb ==> WARNING: Possibly missing firmware for module: rsi_sdio ==> WARNING: Possibly missing firmware for module: mwl8k ==> WARNING: Possibly missing firmware for module: usb8xxx ==> WARNING: Possibly missing firmware for module: libertas_sdio ==> WARNING: Possibly missing firmware for module: libertas_spi ==> WARNING: Possibly missing firmware for module: libertas_cs ==> WARNING: Possibly missing firmware for module: mwifiex_sdio ==> WARNING: Possibly missing firmware for module: mwifiex_usb ==> WARNING: Possibly missing firmware for module: zd1201 ==> WARNING: Possibly missing firmware for module: zd1211rw ==> WARNING: Possibly missing firmware for module: p54spi ==> WARNING: Possibly missing firmware for module: p54pci ==> WARNING: Possibly missing firmware for module: p54usb ==> WARNING: Possibly missing firmware for module: orinoco_usb ==> WARNING: Possibly missing firmware for module: rtl8723ae ==> WARNING: Possibly missing firmware for module: b43 ==> WARNING: Possibly missing firmware for module: b43legacy ==> WARNING: Possibly missing firmware for module: ipw2200 ==> WARNING: Possibly missing firmware for module: ipw2100 ==> WARNING: Possibly missing firmware for module: atmel ==> WARNING: Possibly missing firmware for module: at76c50x_usb ==> WARNING: Possibly missing firmware for module: mlxsw_spectrum ==> WARNING: Possibly missing firmware for module: nfp ==> WARNING: Possibly missing firmware for module: liquidio ==> WARNING: Possibly missing firmware for module: bnx2x ==> WARNING: Possibly missing firmware for module: bna ==> WARNING: Possibly missing firmware for module: softing_cs -> Running build hook: [dropbear] Key is a ssh-rsa key Wrote key to '/etc/dropbear/dropbear_rsa_host_key' Error: unable to create key structure Error reading key from '/etc/ssh/ssh_host_dsa_key' Key is a ecdsa-sha2-nistp256 key Wrote key to '/etc/dropbear/dropbear_ecdsa_host_key' dropbear_rsa_host_key : SHA256:J9v2M8Lso02myd7Ah5Gk2itcNOq0dWVyARVSpBzx8R0 dropbear_ecdsa_host_key : SHA256:1c9URey3Z3JnUAWXKGFIVruzcWnhBtiqiQsEe/TdLXM -> Running build hook: [encryptssh] ==> WARNING: Possibly missing firmware for module: qat_4xxx -> Running build hook: [filesystems] -> Running build hook: [keyboard] -> Running build hook: [fsck] ==> Generating module dependencies ==> Creating zstd-compressed initcpio image: /boot/initramfs-linux-fallback.img ==> Image generation successful
Здесь вы можете увидеть странную ошибку dropbear:
Error: unable to create key structure
Error reading key from '/etc/ssh/ssh_host_dsa_key'
Я не знаю, почему это происходит, и может ли это быть моей проблемой, почему я не могу подключиться к Dropbear SSH, потому что я использую ключ RSA вместо DSA для установки SSH-соединения dropbear, но в любом случае я прилагаю некоторые дополнительные подробности.
[root@host ~]# ls -l /etc/dropbear
total 16
-rw------- 1 root root 140 Aug 11 14:01 dropbear_ecdsa_host_key
-rw------- 1 root root 83 Aug 11 14:00 dropbear_ed25519_host_key
-rw------- 1 root root 1189 Aug 11 13:13 dropbear_rsa_host_key
-rw-r--r-- 1 root root 563 Aug 11 11:15 root_key
[root@host ~]# ls -l /etc/ssh
total 536
-rw-r--r-- 1 root root 505489 Apr 8 14:34 moduli
-rw-r--r-- 1 root root 1531 Apr 8 14:34 ssh_config
-rw-r--r-- 1 root root 3131 Aug 11 09:50 sshd_config
-rw------- 1 root root 668 Aug 11 12:57 ssh_host_dsa_key
-rw-r--r-- 1 root root 599 Aug 11 12:57 ssh_host_dsa_key.pub
-rw------- 1 root root 227 Aug 11 12:57 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 171 Aug 11 12:57 ssh_host_ecdsa_key.pub
-rw------- 1 root root 399 Aug 11 12:57 ssh_host_ed25519_key
-rw-r--r-- 1 root root 91 Aug 11 12:57 ssh_host_ed25519_key.pub
-rw------- 1 root root 2459 Aug 11 12:57 ssh_host_rsa_key
-rw-r--r-- 1 root root 563 Aug 11 12:57 ssh_host_rsa_key.pub
[root@host ~]# cat /etc/ssh/ssh_host_dsa_key
-----BEGIN DSA PRIVATE KEY-----
MIIBuwIBAAKBgQDrcndi0o+A7wKsoc5jL57HgEOJwxKSYBMJWC5314/e3vJ3ADz9
8L4fYbRSmpJrSYvkQsHjALYJsAz7P3KsD6a1NqFlrgX/3aUeEaxQ6yGH1OdX7QeB
GwXSxHnGt07PgbkuQPulASu+d0XLXciCg65d+7HxNw+EKrf+h5qMh8tOHwIVAJD2
2Js/dX/DOC7GTO5EkRMZ9WcBAoGAedXP6N5g2LPh5NuT6dLZA6FMmSkS6RZ+/ofN
5gC1g/zDUcX1xctZzPcaQt94fY+lVLERyBb8kf1/nAFpoHTSEyzmlbw16DsFYYjG
T5E1cOd2NGnmR+mPyQJCkW95HvFdjQreomA1k7QKdndnIwIkjcyWCrZyMw4xydnT
WOUF+aYCgYEAlcX9jnnKzfUmP2bF5MkBeKsMzEYG8/SvECblhuM4J6+wCR5pOhSg
owToGa6pPIsIsLR/DXsHpd8xij+D0oRbKtc2Al3c8HbPJ8tcPfnPPjOpsSMd8YUv
dkj0zg5sIh6ujTcWM5BbDvGKpU+5eW0HHvHU6E/G9tet76/HKpgQtl0CFA/0lVMi
J5VrlqWYS/T94pZqwL8B
-----END DSA PRIVATE KEY-----
Перезагрузить.
Сервер запущен и ожидает парольной фразы. Снимок экрана консоли облачного провайдера.
Я сравнил свои результаты с результатами этого руководства . Кажется, единственная разница в том, что мой вывод содержит строку:SIOCADDRT: Network is unreachable
Попытка подключиться к SSH-серверу dropbear с клиента:
$ eval $(ssh-agent) Agent pid 20578 $ ssh-add unlock_luks Identity added: unlock_luks (<USER>) $ ssh -v root@<SERVERIP>
Выход:
$ ssh -v root@<SERVERIP>
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to <SERVERIP> [<SERVERIP>] port 22.
Никогда не подключается.Nmap говорит, что порт SSH фильтруется:
$ nmap <SERVERIP> -p 22
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.08 seconds
$ nmap <SERVERIP> -p 22 -Pn
Nmap scan report for <HOST> (<SERVERIP>)
Host is up.
PORT STATE SERVICE
22/tcp filtered ssh
Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds
Трассировка nmap (sudo nmap <SERVERIP> -p 22 -Pn --traceroute
) показывает, что пакет доходит не до моего сервера, а до другого сервера. Но когда диск разблокирован и система полностью запустилась, пакет достигает моего сервера, как и ожидалось, и nmap сообщает, что порт SSH открыт.
Надеюсь на вашу помощь!