> ## Documentation Index
> Fetch the complete documentation index at: https://infra-docs.kaeyros.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Durcissement SSH sur les serveurs Kaeyros

> Configuration SSH standard appliquée par Ansible sur l'infrastructure Kaeyros : port non standard, authentification par clés Ed25519, restrictions d'accès et rotation des clés via Passbolt.

Tous les serveurs dédiés Hetzner de la plateforme Kaeyros utilisent une configuration SSH durcie appliquée de manière uniforme par les rôles Ansible. Cette page détaille les paramètres actifs, le fichier `sshd_config` de référence et la procédure de rotation des clés.

## Paramètres de durcissement

La politique SSH repose sur les principes suivants :

| Paramètre | Valeur | Justification |
| - | - | - |
| `Port` | `2222` (parfois) | Obscurcissement du port par défaut pour réduire les scans automatiques |
| `PermitRootLogin` | `no` | Interdiction de la connexion directe en root |
| `PasswordAuthentication` | `no` | Authentification exclusivement par clé publique |
| `PubkeyAcceptedAlgorithms` | `ssh-ed25519` | Seules les clés Ed25519 sont acceptées |
| `AllowUsers` | Liste explicite | Seuls les comptes déclarés peuvent se connecter |
| `LoginGraceTime` | `30` | Temps maximal pour l'authentification (secondes) |
| `MaxAuthTries` | `3` | Nombre maximal de tentatives par connexion |
| `ClientAliveInterval` | `300` | Vérification de la session toutes les 5 minutes |
| `ClientAliveCountMax` | `2` | Déconnexion après 2 échecs de vérification |

> [!NOTE]
>
> Le port 2222 est utilisé sur la majorité des serveurs. Quelques machines historiques peuvent encore utiliser le port 22 en attendant leur reprovisionnement. Consultez l'inventaire Ansible pour connaître le port actif de chaque hôte.

## Configuration sshd\_config type

Le fichier `/etc/ssh/sshd_config` est géré par Ansible. Voici le bloc de configuration appliqué :

```sshd_config sshd_config theme={null}
# Port et protocole
Port 2222
Protocol 2

# Authentification
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PubkeyAcceptedAlgorithms ssh-ed25519
PermitEmptyPasswords no
ChallengeResponseAuthentication no

# Restrictions d'accès
AllowUsers deploy alice bob
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 30

# Session et timeout
ClientAliveInterval 300
ClientAliveCountMax 2
TCPKeepAlive no

# Bannissement et logging
UsePAM yes
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no
Banner /etc/ssh/banner
LogLevel VERBOSE
```

> [!WARNING]
>
> Ne modifiez jamais `sshd_config` manuellement sur un serveur de production. Toute modification doit passer par un commit dans le repo `github.com/kaeyros-analytics-org/ansible-roles`, suivi d'un déploiement Ansible ciblé.

## Rotation des clés SSH

Les clés privées des utilisateurs sont stockées dans Passbolt, l'outil de gestion de mots de passe de l'équipe. La rotation suit ce calendrier :

**1. Génération de la nouvelle paire**

Générez une clé Ed25519 sur votre poste local :

```bash theme={null}
ssh-keygen -t ed25519 -C "prenom.nom@kaeyros-analytics.com" -f ~/.ssh/id_ed25519_kaeyros_new
```

**2. Mise à jour dans Passbolt**

Importez la clé privée dans Passbolt (dossier "SSH / Utilisateur") et partagez-la avec l'équipe DevOps.

**3. Déploiement de la clé publique**

Soumettez la clé publique via une PR sur `ansible-roles` dans `files/ssh_keys/`. Le playbook `users.yml` la déploie sur tous les serveurs.

**4. Révocation de l'ancienne clé**

Attendez 48 heures avant de supprimer l'ancienne clé publique du repo, pour laisser le temps à tous les agents de rafraîchir leur configuration.

> [!TIP]
>
> Conservez toujours une session SSH ouverte lorsque vous testez une nouvelle configuration. En cas d'erreur, vous pourrez revenir en arrière sans être bloqué.

## Vérification et dépannage

Pour vérifier que la configuration est bien appliquée :

```bash theme={null}
# Test de la configuration
sudo sshd -t

# Connexion avec verbosité maximale
ssh -vvv -p 2222 -i ~/.ssh/id_ed25519 deploy@<serveur>

# Vérification des tentatives échouées
sudo grep "Failed password\|Failed publickey" /var/log/auth.log | tail -20
```

En cas de blocage d'accès après une modification, contactez l'équipe DevOps à l'adresse `devops@kaeyros-analytics.com`. Un accès de secours via la console Hetzner est disponible pour les membres de l'équipe on-call.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.