Remote Unlock with Genkernel
May 21, 2026
First step is to define an overlay.
/etc/genkernel.conf
...
INITRAMFS_OVERLAY="/usr/src/initramfs"
Next, create the overlay directory along with root's home directory.
mkdir -p /usr/src/initramfs/root
Now let's create the skeleton for an unlock.sh script.
/usr/src/initramfs/root/unlock.sh
#!/bin/sh
modprobe loop
echo " * opening keyfile, need password"
exit 0
make it executable.
chmod 700 /usr/src/initramfs/root/unlock.sh
Now edit your grub defaults
/etc/default/grub
GRUB_CMDLINE_LINUX="dosshd"
# may also need dozfs domdadm root=ZFS
Now when you run genkernel, use the following parameters.
genkernel --install --ssh --ssh-authorized-keys-file=/root/.ssh/authorized_keys --luks --bootloader=grub2 --mountboot --no-splash initramfs
# may also need --mdadm --zfs
...
* >> Appending dropbear cpio data ...
=================================================================
This initramfs' sshd will use the following host key(s):
2048 MD5:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (RSA)
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (RSA)
256 MD5:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (ECDSA)
256 SHA256: (ECDSA)
256 MD5: (ED25519)
256 SHA256: (ED25519)
=================================================================
* >> Appending luks cpio data ...
...
* >> Appending overlay cpio data ...
Finally, rebuild grub.
grub-mkconfig -o /boot/grub/grub.cfg
When you login, I recommend using ssh.forget when you are testing. This will save you a little time deleting host keys over and over. I don't like the boot environment and production have the same host keys. One way to address this is setting an "unlock" CNAME in your DNS records.