sdm es un gestor de im谩genes de tarjetas SD para Raspberry Pi que te permite automatizar y repetir todo lo que normalmente har铆as a mano: usuarios, claves SSH, paquetes, cifrado y m谩s. En lugar de configurar cada tarjeta manualmente, personalizas una imagen base una sola vez y luego grabas tantas tarjetas id茅nticas como necesites.
En esta publicaci贸n muestro c贸mo instalar y usar sdm para crear una imagen de RaspiOS cifrada que puedes desbloquear por SSH, y luego grabarla en una tarjeta SD.
Requisitos
Para ejecutar sdm necesitas:
- La 煤ltima versi贸n de
systemd-nspawn - La imagen de RaspiOS que deseas personalizar, por ejemplo:
2025-12-04-raspios-trixie-arm64-lite.img.
Instalaci贸n
Una instalaci贸n t铆pica se ve as铆:
|
|
Personalizar la imagen
Despu茅s de leer la documentaci贸n sobre Cifrado de Disco y plugins, realizo la siguiente personalizaci贸n:
|
|
Este comando sdm --customize personaliza una imagen de RasPiOS Trixie ARM64 lite de la siguiente forma:
- Expande el sistema de archivos ra铆z y regenera las claves host de SSH
- Configura el swap, crea un usuario, instala una clave SSH y ajusta los par谩metros del demonio SSH
- Configura el cifrado completo del sistema de archivos ra铆z con desbloqueo SSH en initramfs y red est谩tica
- Desactiva piwiz y reinicia despu茅s de la personalizaci贸n
Desglose detallado
Par谩metros globales:
customize: Personaliza el archivo de imagen especificado.host rpi-1: Establece el nombre de host como rpi-1.plugin-debug: Habilita la salida de depuraci贸n de los plugins.expand-root: Expande el sistema de archivos ra铆z al primer arranque.regen-ssh-host-keys: Regenera las claves host SSH en el primer arranque para que cada dispositivo tenga claves 煤nicas.restart: Reinicia la imagen despu茅s de finalizar la personalizaci贸n.- Imagen objetivo:
2025-12-04-raspios-trixie-arm64-lite.img.
Plugins
swap:"filesize=2048|zramsize=1024": Configura un archivo swap de 2 GB y un dispositivo zram de 1 GB mediante el plugin de swap.user:"deluser=pi|adduser=user|uid=4321|password=12345|addgroup=sudo": Elimina el usuario por defectopi, crea un nuevo usuariousercon UID 4321, establece su contrase帽a y lo agrega al gruposudo.copyfile:"from=...|to=...|chown=user:user|chmod=600|mkdirif": Copia una clave p煤blica SSH dentro de la imagen comoauthorized_keyspara la cuenta del usuario, creando el directorio.sshsi es necesario, y ajustando los permisos.sshd:"password-authentication=yes|port=62626": Configura el daemon SSH para permitir autenticaci贸n por contrase帽a y escuchar en el puerto 62626.cryptroot:"ssh|authkeys=...|crypto=xchacha|ipaddr=...|gateway=...|netmask=...|dns=...": Configura el cifrado completo del sistema de archivos ra铆z con LUKS, habilita el desbloqueo SSH en initramfs, usa cifrado xchacha y define red est谩tica para el initramfs.network:"ifname=eth0|ipv4-static-ip=...|ipv4-static-gateway=...": Establece una IP est谩tica paraeth0en el sistema en ejecuci贸n.disables:piwiz: Desactiva el asistente de primer iniciopiwizpara que no solicite teclado ni usuario al arrancar.
Cifrar la tarjeta SD (rootfs)
-
Durante la personalizaci贸n invocamos el plugin
cryptroot, por lo tanto, ahora solo es necesario grabar la imagen en la tarjeta SD situada en/dev/sdb:1sudo sdm --burn /dev/sdb 2025-12-04-raspios-trixie-arm64-lite.img -
Primer arranque: se ejecuta
sdm-auto-encrypty el sistema se reinicia.- El servicio ejecuta
sdm-cryptconfig --sdm ... --reboot, que actualizainitramfs,cmdline.txt,fstabycrypttab.
- El servicio ejecuta
-
Segundo arranque: se abre el prompt de initramfs; ejecuta
sdmcryptfs.- El sistema cae a (initramfs). Conecta un disco auxiliar mayor al espacio usado y ejecuta:
1(initramfs) sdmcryptfs /dev/mmcblk0 /dev/sdY- Sustituye
/dev/mmcblk0por el disco del sistema y/dev/sdYpor el disco auxiliar. - Sigue las instrucciones para cifrar y desbloquear el rootfs. Luego escribe
exitpara continuar el arranque.
-
Arranque final: rootfs cifrado activo.
El sistema ahora pedir谩 la contrase帽a en cada inicio.
Si SSH est谩 habilitado, puedes desbloquear remotamente iniciando sesi贸n comorootal IP del initramfs durante el arranque.