search

Remote LUKS unlocking with TinySSH

Wed, Oct 20, 2021 01:00 CEST

Tags: Automation, Security, Encryption, LUKS, SSH

Goodbye keyboards and monitors!

This guide assumes you already have a system with LUKS root encryption. See for instance:

Dependencies

pacman -S mkinitcpio-{netconf,tinyssh,utils}

/etc/tinyssh/root_key

Put a ed25519 public key there (for instance, generated with ssh-keygen -t ed25519). Syntax is identical to ~/.ssh/authorized_keys.

/etc/mkinitcpio.conf

Replace encrypt hook as follows:

-HOOKS=(... encrypt ...)
+HOOKS=(... netconf tinyssh encryptssh ...)

Regenerate initramfs

mkinitcpio -P

NB1: You may notice a tinyssh-convert usage message when running mkinicpio -P. This is because the current release of mkinitcpio-tinyssh is broken. To fix:

rm -r /etc/tinyssh/sshkeydir
tinyssh-convert < /etc/ssh/ssh_host_ed25519_key /etc/tinyssh/sshkeydir/
mkinitcpio -P

NB2: No need to add ethernet module e1000e. Other modules might behave differently. This depends on correct behavior of the autodetect hook.

MODULES=()
...
HOOKS=(base udev autodetect ...)

Boot loader entry

Add the following parameters to your options line

ip=<static-address>::<gateway>:<subnet-mask>::eth0:none

You can find the kernel interface name (eth0) by scanning through dmesg.

NB: DHCP (ip=dhcp or ip=:::::eth0:dhcp with netconf_timeout=60) does not seem to work.