ssh-cle-publique.sh
Una placa conectada a la red debe bloquearse antes de salir del taller: este script comprueba que tu clave está instalada, desactiva la autenticación por contraseña y recarga sshd sin cortar la sesión actual.
Hardware
Un Arduino Portenta X8 (módulo ST STM32MP1: quad Cortex-A7 Linux + doble núcleo Cortex-M4 de tiempo real, 8 GB eMMC, 2 GB LPDDR4, Wi-Fi/BT integrados, opción LTE). Ninguno; un par de claves SSH generado en el puesto de trabajo.
Cableado
Nada que cablear. Hacerlo primero por SSH por cable/USB, no en remoto en una red hostil.
Funcionamiento
El script se niega a actuar con authorized_keys vacío, escribe un drop-in de sshd_config, valida con sshd -t y recarga: la sesión en curso nunca se corta.
Ejecución
Lado Linux: acceso SSH (USB-C routed o red) sobre la imagen Portenta Linux, scripts bash/Python. Lado tiempo real: Arduino IDE con el core « Arduino Mbed OS Portenta X8 Boards », núcleo M7 de aplicación, grabado vía mboot desde Linux.
Variantes
Añadir un usuario sudo no-root, un fail2ban ligero, o cortar el SSH cuando no se use (timer systemd).
ssh-cle-publique.sh
#!/bin/bash
# Durcissement SSH de la carte : cle publique obligatoire.
# A lancer APRES avoir installe sa cle (ssh-copy-id).
set -e
echo "1) Cle publique installee ? (sinon : ssh-copy-id root@<carte>)"
grep -q . /root/.ssh/authorized_keys 2>/dev/null || {
echo "authorized_keys vide : installez d'abord votre cle !"; exit 1; }
echo "2) Desactivation des mots de passe..."
if ! grep -q '^PasswordAuthentication no' /etc/ssh/sshd_config.d/hardening.conf 2>/dev/null; then
printf 'PasswordAuthentication no\nPermitRootLogin prohibit-password\n' |
sudo tee /etc/ssh/sshd_config.d/hardening.conf
fi
sudo sshd -t && sudo systemctl reload ssh
echo "3) Verification : la session actuelle reste valide ;"
echo " ouvrez un AUTRE terminal pour tester la cle avant de fermer."
# En production, ajouter un utilisateur non-root + sudo,
# et couper le mot de passe sudo si la cle U2F est supportee.