module

Beryl::CLI::PrepRescue

Constants

DEFAULT_BIND = "127.0.0.1"
DEFAULT_PORT = 8080
DEFAULT_PUBKEY = "~/.ssh/id_ed25519.pub"
MACOS_FW_CTL = "/usr/libexec/ApplicationFirewall/socketfilterfw"
PUBLIC_IP_TIMEOUT = 3.seconds
PUBLIC_IP_URL = "https://api.ipify.org"
SETUP_SCRIPT_TEMPLATE = "#!/bin/sh\n# Script de provisioning Debian/Ubuntu généré par `beryl prep-rescue`.\n# Installe openssh-server et injecte la clé publique dans /root/.ssh/.\nset -eu\n\nHOST_URL=\"__HOST_URL__\"\n\necho \"==> [beryl prep-rescue] apt update + openssh-server + curl\"\nexport DEBIAN_FRONTEND=noninteractive\napt-get update -qq\napt-get install -y -qq openssh-server curl\n\necho \"==> [beryl prep-rescue] clé SSH root\"\nmkdir -p /root/.ssh && chmod 700 /root/.ssh\ncurl -fL \"$HOST_URL/k\" >> /root/.ssh/authorized_keys\nchmod 600 /root/.ssh/authorized_keys\nsort -u /root/.ssh/authorized_keys -o /root/.ssh/authorized_keys\n\n# Ne garde que la clé d'hôte ED25519. Évite de polluer known_hosts côté\n# opérateur avec trois entrées par VM (RSA, ECDSA, ED25519) à purger à\n# chaque recréation. Aligné sur Mozilla Modern OpenSSH.\necho \"==> [beryl prep-rescue] retire les clés d'hôte RSA/ECDSA\"\nrm -f /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub\nrm -f /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key.pub\n\nsystemctl enable --now ssh\n\necho \"==> [beryl prep-rescue] terminé. beryl bootstrap peut maintenant se connecter.\""

Gabarit du script de provisioning Debian/Ubuntu. __HOST_URL__ est substitué à la volée par l'URL de base complète.

Principe minimaliste : on ne touche à RIEN dans sshd_config. Debian 12+ et Ubuntu 22.04+ ont déjà PermitRootLogin prohibit-password par défaut (accepte la clé, refuse le mot de passe). Comme aucun mot de passe root n'est défini, la seule auth possible est par clé — exactement ce qu'on veut. Le script se contente donc d'installer sshd et d'injecter la clé.

Class methods

run(args : Array(String)) : Int32
Source