Skip to main content

Bootstrap automatique d'un poste Fedora d'administration

Cette page décrit la mise en place d'un poste Fedora destiné à l'administration de l'infrastructure. L'objectif est de pouvoir :

  • installer les outils nécessaires ;
  • générer une clé SSH ;
  • créer automatiquement le fichier ~/.ssh/config ;
  • déployer la clé publique sur les hôtes utilisant root ;
  • déployer la clé publique sur les hôtes utilisant nancre ;
  • valider rapidement que tout fonctionne.

Prérequis

  • Un poste Fedora avec accès administrateur local.
  • Accès réseau aux serveurs du LAN 10.151.151.0/24.
  • Le mot de passe du compte root sur les hôtes concernés.
  • Le mot de passe du compte nancre sur les hôtes concernés.

Script de bootstrap

Créer un fichier, par exemple bootstrap-fedora.sh, puis coller le script ci-dessous.

#!/usr/bin/env bash
set -euo pipefail

echo "=== Bootstrap Fedora Administration ==="

SSH_DIR="$HOME/.ssh"
KEY_FILE="$SSH_DIR/id_ed25519"
CONFIG_FILE="$SSH_DIR/config"

ROOT_HOSTS=(
  10.151.151.230
  10.151.151.100
  10.151.151.220
  10.151.151.231
  10.151.151.40
  10.151.151.239
  10.151.151.249
)

NANCRE_HOSTS=(
  10.151.151.244
  10.151.151.245
  10.151.151.246
  10.151.151.247
  10.151.151.240
)

echo
echo "[1/6] Installation des paquets nécessaires"
sudo dnf install -y openssh-clients sshpass

echo
echo "[2/6] Préparation du dossier ~/.ssh"
mkdir -p "$SSH_DIR"
chmod 700 "$SSH_DIR"

echo
echo "[3/6] Génération de la clé SSH si absente"
if [[ ! -f "$KEY_FILE" ]]; then
  ssh-keygen -t ed25519 -a 100 -f "$KEY_FILE" -N ""
else
  echo "Clé déjà existante : $KEY_FILE"
fi

echo
echo "[4/6] Création de ~/.ssh/config"
cat > "$CONFIG_FILE" <<'EOF'
Host nas
    HostName 10.151.151.201
    User n.ancre
    Port 22022
    IdentityFile ~/.ssh/id_ed25519

Host 10.151.151.* !10.151.151.201
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host proxmox
    HostName 10.151.151.249
    User root
    IdentityFile ~/.ssh/id_ed25519

Host proxmox-ms
    HostName 10.151.151.239
    User root
    IdentityFile ~/.ssh/id_ed25519

Host squall
    HostName 10.151.151.245
    User nancre
    IdentityFile ~/.ssh/id_ed25519

Host linoa
    HostName 10.151.151.246
    User nancre
    IdentityFile ~/.ssh/id_ed25519

Host quistis
    HostName 10.151.151.247
    User nancre
    IdentityFile ~/.ssh/id_ed25519

Host selphie
    HostName 10.151.151.240
    User nancre
    IdentityFile ~/.ssh/id_ed25519

Host network
    HostName 10.151.151.40
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no

Host webserver
    HostName 10.151.151.100
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no

Host bitwarden
    HostName 10.151.151.231
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no

Host bookstack
    HostName 10.151.151.220
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no

Host bastion
    HostName 10.151.151.244
    User nancre
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host plex
    HostName 10.151.151.105
    User nancre
    IdentityFile ~/.ssh/awx_ansible_key
EOF

chmod 600 "$CONFIG_FILE"

echo
echo "[5/6] Déploiement de la clé sur les hôtes root"

read -s -p "Mot de passe root : " ROOTPASS
echo
export SSHPASS="$ROOTPASS"

for host in "${ROOT_HOSTS[@]}"; do
  echo "  - root@$host"
  sshpass -e ssh-copy-id \
    -o StrictHostKeyChecking=no \
    -i "$KEY_FILE.pub" \
    root@"$host"
done

unset SSHPASS
unset ROOTPASS

echo
echo "[6/6] Déploiement de la clé sur les hôtes nancre"

read -s -p "Mot de passe nancre : " NANCREPASS
echo
export SSHPASS="$NANCREPASS"

for host in "${NANCRE_HOSTS[@]}"; do
  echo "  - nancre@$host"
  sshpass -e ssh-copy-id \
    -o StrictHostKeyChecking=no \
    -i "$KEY_FILE.pub" \
    nancre@"$host"
done

unset SSHPASS
unset NANCREPASS

echo
echo "=== Vérification ==="
ssh -G proxmox > /dev/null
ssh -G squall > /dev/null
ssh -G bastion > /dev/null

echo
echo "Bootstrap terminé avec succès."

Installation du script

nano bootstrap-fedora.sh
chmod +x bootstrap-fedora.sh

Exécution

./bootstrap-fedora.sh

Le script va demander deux mots de passe distincts :

  • le mot de passe de root pour les machines administrées en root ;
  • le mot de passe de nancre pour les machines administrées avec ce compte.

Structure des accès

Accès en root

  • 10.151.151.230
  • 10.151.151.100
  • 10.151.151.220
  • 10.151.151.231
  • 10.151.151.40
  • 10.151.151.239
  • 10.151.151.249

Accès avec nancre

  • 10.151.151.244
  • 10.151.151.245
  • 10.151.151.246
  • 10.151.151.247
  • 10.151.151.240

Tests manuels

Après exécution, vérifier les alias SSH :

ssh proxmox
ssh proxmox-ms
ssh squall
ssh linoa
ssh quistis
ssh selphie
ssh network
ssh webserver
ssh bitwarden
ssh bookstack
ssh bastion
ssh nas

Si tout est correct, aucune demande de mot de passe ne doit apparaître pour les hôtes déjà provisionnés.


Notes

  • Le compte plex utilise ici une clé dédiée ~/.ssh/awx_ansible_key.
  • Si tu veux uniformiser complètement le poste, tu peux aussi basculer Plex sur la clé id_ed25519.
  • La configuration est pensée pour être reproductible sur un nouveau portable Fedora.