# 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.