Outils pour utilisateurs

Outils du site


linux:ca-ssh

Ceci est une ancienne révision du document !


Table des matières

Setup CA SSH pour Make IT Simple

Guide complet pour mettre en place une autorité de certification SSH dans un contexte MSP, avec support multi-Yubikey et intégration dans l'infrastructure MIS.


Compatibilité Windows

Réponse courte : oui, mais avec une distinction importante entre les rôles.

Rôle Système Notes
Machine CA (signature des certifs) Linux (LXC Proxmox) OpenSSH côté Linux uniquement pour ce setup
Poste technicien (utilisation Yubikey) Windows / Linux / macOS OpenSSH inclus dans Windows 10/11 (1809+)
Serveurs clients (qui acceptent les certifs) Linux principalement Windows Server avec OpenSSH for Windows fonctionne aussi

Côté Windows pour les techniciens :

  • OpenSSH client/server est intégré nativement à Windows 10 (build 1809+) et Windows 11
  • Vérification : Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
  • Installation si absent : Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  • Pour les versions récentes d'OpenSSH (recommandé pour FIDO2) : winget install Microsoft.OpenSSH.Beta
  • Le support FIDO2/Yubikey (ed25519-sk) fonctionne nativement
  • L'utilisation des certificats SSH est transparente : il suffit de placer le -cert.pub à côté de la clé privée

Côté machine CA : on reste sur Linux (LXC Debian sur Proxmox). C'est plus simple, plus auditable, et compatible avec l'écosystème MIS existant.


Notes Debian 13 (Trixie)

Cette documentation cible Debian 13 (codename Trixie), sortie le 9 août 2025. Quelques points importants pour notre cas d'usage SSH CA :

Versions embarquées

Composant Bookworm (Debian 12) Trixie (Debian 13)
OpenSSH 9.2p1 10.0p1
systemd 252 257
Kernel 6.1 LTS 6.12 LTS
Python 3.11 3.13

Changements pertinents pour la CA SSH

OpenSSH 10.0 : meilleurs algos par défaut, mais surtout :

  • Les clés DSA ne sont plus supportées du tout, même avec les options de compat (HostKeyAlgorithms, PubkeyAcceptedAlgorithms). Aucun impact pour nous (on n'utilise que Ed25519/Ed25519-sk), mais à savoir si tu te connectes à de très vieux équipements (un apt install openssh-client-ssh1 peut servir pour ces cas-là).
  • Le support FIDO2 (libfido2) est plus mature qu'en Bookworm.
  • Les algorithmes post-quantum (mlkem768x25519-sha256) sont disponibles par défaut pour le key exchange.

/tmp est maintenant un tmpfs en Trixie (RAM). Aucun impact sur nos workflows (les .pub font quelques centaines d'octets), mais à garder en tête pour des scripts qui manipuleraient de gros fichiers temporaires.

/etc/sysctl.conf n'est plus lu : utiliser /etc/sysctl.d/99-mis.conf à la place pour tes éventuelles personnalisations kernel. Sans impact direct sur le SSH CA, mais bon à savoir pour tes playbooks Ansible.

openssh-server ne lit plus ~/.pam_environment : si jamais tu avais des configs spécifiques pour des sessions SSH, à migrer vers ~/.bash_profile ou la conf PAM système. Non pertinent pour notre workflow MIS.

Support à long terme

  • Full support jusqu'à août 2028
  • LTS jusqu'à juin 2030

C'est donc une base saine pour démarrer une infra MSP qui doit vivre 4-5 ans sans upgrade majeur.

Images officielles


Vue d'ensemble de l'architecture

┌──────────────────┐
│   Yubikey x2     │  Techniciens MIS (Vincent, futur tech...)
│   par tech       │  → génèrent leurs clés ed25519-sk localement
└────────┬─────────┘
         │ .pub envoyée à Odoo
         ▼
┌──────────────────┐         ┌──────────────────────┐
│      Odoo        │ ──API──►│  Proxmox MIS         │
│ makeitsimple_    │         │  └─ LXC mis-ssh-ca   │
│   ssh_ca         │  démarre│     (éteinte 99%     │
│                  │  à la   │      du temps)       │
│                  │  demande│                      │
└────────┬─────────┘         └──────────┬───────────┘
         │                              │ ssh-keygen -s
         │                              ▼
         │                   ┌──────────────────────┐
         │                   │  Certificat SSH      │
         │◄──────────────────│  signé (-cert.pub)   │
         │                   └──────────────────────┘
         │
         │ déploiement
         ▼
┌──────────────────┐
│  Serveurs        │
│  clients         │  /etc/ssh/mis-users-ca.pub
│  (200+ VMs)      │  /etc/ssh/mis-revoked-keys
└──────────────────┘

Phase 1 : Préparation de la LXC CA

Étape 1.1 : Création du conteneur

Sur le Proxmox MIS (pas un hyperviseur client) :

# Variables
CTID=200
HOSTNAME="mis-ssh-ca"
STORAGE="local-zfs"
BRIDGE="vmbr10"          # VLAN management isolé
TEMPLATE="debian-13-standard_13.5-1_amd64.tar.zst"
# Vérifier le nom exact disponible avec :
#   pveam update && pveam available | grep debian-13
# Et télécharger si pas encore présent :
#   pveam download local debian-13-standard_13.5-1_amd64.tar.zst
 
# Création LXC
pct create $CTID local:vztmpl/$TEMPLATE \
  --hostname $HOSTNAME \
  --cores 1 --memory 512 --swap 256 \
  --rootfs $STORAGE:8 \
  --net0 name=eth0,bridge=$BRIDGE,ip=10.10.10.50/24,gw=10.10.10.1 \
  --nameserver 10.10.10.1 \
  --onboot 0 \
  --start 0 \
  --unprivileged 1 \
  --features nesting=0,keyctl=0 \
  --password "TEMP_PASSWORD_CHANGE_IMMEDIATELY"
 
# Démarrage
pct start $CTID

Étape 1.2 : Durcissement initial

# Entrer dans la LXC
pct enter $CTID
 
# Hardening de base
apt update && apt upgrade -y
apt install -y openssh-server fail2ban ufw vim
 
# Firewall : SSH uniquement depuis le subnet de management
ufw default deny incoming
ufw default deny outgoing
ufw allow from 10.10.10.0/24 to any port 22 proto tcp
ufw allow out 53/udp                                   # DNS pour apt
ufw allow out 80,443/tcp                               # apt updates
ufw enable
 
# Utilisateur dédié pour la signature
useradd -m -s /bin/bash ca-signer
mkdir -p /home/ca-signer/.ssh
chmod 700 /home/ca-signer/.ssh
 
# Désactivation auth password sur SSH
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart ssh

Étape 1.3 : Stockage chiffré (optionnel mais recommandé)

Pour aller plus loin, la rootfs de la LXC peut être stockée sur un dataset ZFS chiffré côté hôte Proxmox :

# Sur l'hôte Proxmox (à faire AVANT la création de la LXC)
zfs create -o encryption=aes-256-gcm -o keyformat=passphrase rpool/encrypted-vault
# La passphrase sera demandée à chaque démarrage de l'hôte

Phase 2 : Génération des CAs

Étape 2.1 : CA pour les utilisateurs (techniciens)

# Connecté en tant que ca-signer dans la LXC
mkdir -p ~/mis-ca && cd ~/mis-ca
chmod 700 .
 
ssh-keygen -t ed25519 -a 200 \
  -f mis-users-ca \
  -C "MIS Users CA - Make IT Simple" \
  -N 'PASSPHRASE_TRES_ROBUSTE_ICI'

Étape 2.2 : CA pour les hôtes (serveurs)

ssh-keygen -t ed25519 -a 200 \
  -f mis-hosts-ca \
  -C "MIS Hosts CA - Make IT Simple" \
  -N 'AUTRE_PASSPHRASE_TRES_ROBUSTE'

Étape 2.3 : Backup chiffré des clés privées

⚠️ Étape critique. Sans backup, perdre la LXC = perdre tout le contrôle d'accès.

# Création d'une archive chiffrée
cd ~/mis-ca
tar czf - mis-users-ca mis-hosts-ca | \
  age -p > mis-ca-backup-$(date +%Y%m%d).tar.gz.age
# Demande une passphrase distincte des passphrases des CAs
 
# À conserver dans :
# 1. Bitwarden (attachment de l'entrée "MIS SSH CA - Master Backup")
# 2. Clé USB chiffrée dans coffre physique
# 3. (optionnel) Coffre bancaire pour archive papier-QR de la passphrase

Phase 3 : Bootstrap d'un serveur client

Étape 3.1 : Déploiement de la CA users sur le serveur

Sur un serveur client (Debian provisionné via cloud-init) :

# Copie de la clé publique de la CA users
scp ca-signer@10.10.10.50:~/mis-ca/mis-users-ca.pub /etc/ssh/mis-users-ca.pub
chmod 644 /etc/ssh/mis-users-ca.pub
 
# Création d'un KRL vide initial
ssh-keygen -k -f /etc/ssh/mis-revoked-keys
chmod 644 /etc/ssh/mis-revoked-keys
 
# Configuration sshd
cat >> /etc/ssh/sshd_config <<'EOF'
 
# ===== MIS SSH CA =====
TrustedUserCAKeys /etc/ssh/mis-users-ca.pub
RevokedKeys /etc/ssh/mis-revoked-keys
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
# ======================
EOF
 
# Test et reload
sshd -t && systemctl reload ssh

À industrialiser via Ansible (voir Phase 7).

Étape 3.2 : Certificat d'hôte pour le serveur (recommandé)

Sur la CA :

# Récupération de la clé publique du serveur
scp mis-admin@srv01.acme.lan:/etc/ssh/ssh_host_ed25519_key.pub /tmp/srv01.pub
 
# Signature comme hôte
ssh-keygen -s ~/mis-ca/mis-hosts-ca \
  -I "srv01.acme.lan-$(date +%Y)" \
  -h \
  -n "srv01.acme.lan,srv01,192.168.1.50" \
  -V "+104w" \
  /tmp/srv01.pub
 
# Envoi sur le serveur
scp /tmp/srv01-cert.pub mis-admin@srv01.acme.lan:/tmp/
ssh mis-admin@srv01.acme.lan "sudo mv /tmp/srv01-cert.pub /etc/ssh/ssh_host_ed25519_key-cert.pub"
 
# Activation côté serveur
ssh mis-admin@srv01.acme.lan "sudo sed -i '/^HostCertificate/d' /etc/ssh/sshd_config && \
  echo 'HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub' | sudo tee -a /etc/ssh/sshd_config && \
  sudo systemctl reload ssh"

Étape 3.3 : Configuration côté postes techniciens

Sur chaque poste tech (Windows ou Linux), dans ~/.ssh/known_hosts :

@cert-authority *.acme.lan,*.mis.lan,10.10.* ssh-ed25519 AAAAC3... MIS Hosts CA

(la clé publique correspond au contenu de mis-hosts-ca.pub)

À partir de ce moment, plus aucun warning de host key à la première connexion sur un serveur MIS.


Phase 4 : Enrôlement d'une Yubikey technicien

Étape 4.1 : Génération sur le poste du technicien

Sur Windows :

# PowerShell, Yubikey branchée
# Définition d'un PIN FIDO2 si pas déjà fait (via Yubikey Manager GUI)
 
ssh-keygen -t ed25519-sk -O resident -O application=ssh:mis -O verify-required `
  -f $env:USERPROFILE\.ssh\id_ed25519_sk_yubi1 `
  -C "vincent@yubi-primary"

Sur Linux/macOS :

ssh-keygen -t ed25519-sk -O resident -O application=ssh:mis -O verify-required \
  -f ~/.ssh/id_ed25519_sk_yubi1 \
  -C "vincent@yubi-primary"

Résultat : id_ed25519_sk_yubi1 (stub) et id_ed25519_sk_yubi1.pub (clé publique).

Étape 4.2 : Signature par la CA

Le technicien envoie sa .pub à l'admin MIS (via Odoo, mail, ou git interne). Sur la CA :

# Sur la LXC, en tant que ca-signer
cd ~/mis-ca
 
# Variables
PUBKEY_PATH=/tmp/vincent-yubi-primary.pub
CERT_ID="vincent-yubi-primary-$(date +%Y)"
PRINCIPALS="mis-admin,vincent"
VALIDITY="+52w"
SERIAL=1001            # incrémenté à chaque signature
 
ssh-keygen -s mis-users-ca \
  -I "$CERT_ID" \
  -n "$PRINCIPALS" \
  -V "$VALIDITY" \
  -z $SERIAL \
  -O clear \
  -O no-port-forwarding \
  -O no-agent-forwarding \
  -O permit-pty \
  "$PUBKEY_PATH"
 
# Le fichier vincent-yubi-primary-cert.pub est généré à côté de la .pub

Renvoyer le -cert.pub au technicien.

Étape 4.3 : Mise en place côté technicien

Le tech place le -cert.pub à côté de sa clé :

~/.ssh/
├── id_ed25519_sk_yubi1
├── id_ed25519_sk_yubi1.pub
└── id_ed25519_sk_yubi1-cert.pub    ← nouveau

Vérification du contenu du certificat :

ssh-keygen -L -f ~/.ssh/id_ed25519_sk_yubi1-cert.pub

Doit afficher : Principals, Valid from/to, Critical Options, Extensions.

Étape 4.4 : Test de connexion

ssh -i ~/.ssh/id_ed25519_sk_yubi1 mis-admin@srv01.acme.lan
# → PIN FIDO2 demandé
# → touch Yubikey
# → connecté

Indicateur clé : aucune modification d'authorized_keys sur le serveur. Tout passe par le certificat.

Étape 4.5 : Enrôlement de la Yubikey de backup

Répéter Étape 4.1 à 4.4 avec la deuxième Yubikey. Important : utiliser un serial différent (-z 1002) et un identifiant unique (vincent-yubi-backup-2026).

À la fin, le technicien a 6 fichiers dans ~/.ssh/ :

id_ed25519_sk_yubi1
id_ed25519_sk_yubi1.pub
id_ed25519_sk_yubi1-cert.pub
id_ed25519_sk_yubi2
id_ed25519_sk_yubi2.pub
id_ed25519_sk_yubi2-cert.pub

Étape 4.6 : Configuration `~/.ssh/config` côté tech

Host *.acme.lan acme-*
    User mis-admin
    IdentityFile ~/.ssh/id_ed25519_sk_yubi1
    IdentityFile ~/.ssh/id_ed25519_sk_yubi2
    IdentitiesOnly yes
    CertificateFile ~/.ssh/id_ed25519_sk_yubi1-cert.pub
    CertificateFile ~/.ssh/id_ed25519_sk_yubi2-cert.pub

Host *.mis.lan
    User mis-admin
    IdentityFile ~/.ssh/id_ed25519_sk_yubi1
    IdentityFile ~/.ssh/id_ed25519_sk_yubi2
    IdentitiesOnly yes
    CertificateFile ~/.ssh/id_ed25519_sk_yubi1-cert.pub
    CertificateFile ~/.ssh/id_ed25519_sk_yubi2-cert.pub

SSH essaiera Yubi1 d'abord, puis Yubi2 si la première n'est pas branchée. Aucune intervention nécessaire pour basculer.


Phase 5 : Révocation d'une clé

Étape 5.1 : Mise à jour de la KRL

Sur la CA, si on perd la Yubikey backup de Vincent :

cd ~/mis-ca
 
# Création du spec de révocation
cat > /tmp/krl-spec.txt <<'EOF'
# Révocation par serial
serial: 1002
 
# Alternative : par identifiant
# id: vincent-yubi-backup-2026
 
# Alternative : par hash de clé publique
# sha256: SHA256:xxxxx
EOF
 
# Génération/mise à jour de la KRL
ssh-keygen -k -f mis-revoked-keys -s mis-users-ca -u /tmp/krl-spec.txt
# -u = update (ajoute au KRL existant)
# Sans -u, le KRL est remplacé
 
# Vérification du contenu
ssh-keygen -Q -f mis-revoked-keys -t krl

Étape 5.2 : Déploiement de la KRL

Via Ansible sur tout le parc (voir Phase 7) :

ansible-playbook -i inventory.yml mis-deploy-krl.yml

En quelques minutes, la Yubikey backup n'est plus utilisable sur aucun serveur MIS. Aucune modification de sshd_config ni d'authorized_keys n'est requise.


Phase 6 : Renouvellement des certificats

Les certificats ayant une durée de vie de 1 an, prévoir un workflow de renouvellement :

Option A : Manuel

Refaire les étapes 4.2 (signature) avec un nouvel identifiant vincent-yubi-primary-2027 et envoyer le nouveau -cert.pub au tech. Le tech remplace son ancien -cert.pub.

Option B : Automatisé via Odoo

Cron Odoo qui scanne les certificats expirant dans 30 jours et :

  1. Notifie le tech par mail
  2. Propose un wizard de renouvellement
  3. Si le tech accepte, regénère un certif via l'API de la CA
  4. Envoie le nouveau -cert.pub au tech (par mail chiffré ou portail download)

Phase 7 : Industrialisation Ansible

Playbook de déploiement initial CA + KRL

playbooks/mis-ssh-ca-deploy.yml :

---
- name: Deploy MIS SSH CA on all client servers
  hosts: all_clients
  become: true
  vars:
    ca_pub_path: files/mis-users-ca.pub
    krl_path: files/mis-revoked-keys
  
  tasks:
    - name: Deploy MIS users CA public key
      copy:
        src: "{{ ca_pub_path }}"
        dest: /etc/ssh/mis-users-ca.pub
        owner: root
        group: root
        mode: '0644'
      notify: reload sshd
    
    - name: Deploy current KRL
      copy:
        src: "{{ krl_path }}"
        dest: /etc/ssh/mis-revoked-keys
        owner: root
        group: root
        mode: '0644'
      notify: reload sshd
    
    - name: Configure sshd for MIS CA
      blockinfile:
        path: /etc/ssh/sshd_config
        marker: "# {mark} MIS CA managed by Ansible"
        block: |
          TrustedUserCAKeys /etc/ssh/mis-users-ca.pub
          RevokedKeys /etc/ssh/mis-revoked-keys
          PasswordAuthentication no
          KbdInteractiveAuthentication no
        validate: 'sshd -t -f %s'
      notify: reload sshd
    
    - name: Ensure mis-admin user exists
      user:
        name: mis-admin
        groups: sudo
        append: yes
        shell: /bin/bash
        state: present
    
    - name: Sudo NOPASSWD for mis-admin
      copy:
        content: "mis-admin ALL=(ALL) NOPASSWD:ALL\n"
        dest: /etc/sudoers.d/mis-admin
        mode: '0440'
        validate: 'visudo -cf %s'
  
  handlers:
    - name: reload sshd
      systemd:
        name: ssh
        state: reloaded

Playbook de mise à jour KRL uniquement (rapide)

playbooks/mis-update-krl.yml :

---
- name: Update MIS SSH KRL on all client servers
  hosts: all_clients
  become: true
  
  tasks:
    - name: Deploy updated KRL
      copy:
        src: files/mis-revoked-keys
        dest: /etc/ssh/mis-revoked-keys
        mode: '0644'
      notify: reload sshd
  
  handlers:
    - name: reload sshd
      systemd:
        name: ssh
        state: reloaded

Phase 8 : Compte parachute (break-glass)

⚠️ Ne JAMAIS sauter cette étape.

Indépendamment de la CA, chaque serveur doit avoir au moins un accès de secours :

# Sur un poste sûr, génération d'une clé classique pour le parachute
ssh-keygen -t ed25519 -a 200 -f mis-breakglass -C "MIS BREAK-GLASS - DO NOT USE"
# Choisir une passphrase ultra-robuste
 
# Stocker mis-breakglass (privé) :
#   - Chiffré dans Bitwarden (attachment)
#   - Sur clé USB chiffrée dans coffre physique
#   - Supprimer du disque local après stockage sécurisé
 
# Garder mis-breakglass.pub pour déploiement

Intégrer la clé publique dans le template cloud-init / virt-customize de tous les serveurs :

# Dans virt-customize de la golden image
virt-customize -a debian-13-genericcloud-amd64.qcow2 \
  --run-command 'useradd -m -s /bin/bash mis-breakglass' \
  --ssh-inject mis-breakglass:file:/path/to/mis-breakglass.pub \
  --run-command 'echo "mis-breakglass ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/mis-breakglass' \
  ...

Le jour où la CA est inaccessible (perte de toutes les Yubikeys, corruption de la LXC, etc.), tu sors la clé du coffre Bitwarden, tu te connectes avec, tu reconstruis la situation.


Phase 9 : Migration future vers Yubikey PIV pour la CA

Quand le workflow sera rodé (6-12 mois), migration de la clé privée de la CA depuis disque vers Yubikey PIV :

# Sur un poste sûr, Yubikey dédiée "CA Master" branchée
apt install yubikey-manager opensc
 
# Génération d'une nouvelle paire ECCP384 dans slot 9c
ykman piv keys generate --algorithm ECCP384 --pin-policy ONCE --touch-policy CACHED \
  9c /tmp/mis-ca-piv.pub
 
# Certificat self-signed pour PIV
ykman piv certificates generate --subject "CN=MIS Users CA" 9c /tmp/mis-ca-piv.pub
 
# Export au format SSH
ssh-keygen -D /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -e > mis-users-ca-yubi.pub

Pour signer ensuite :

ssh-keygen -s mis-users-ca-yubi.pub \
  -D /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so \
  -I "vincent-yubi-primary-2027" \
  -n "mis-admin,vincent" \
  -V "+52w" \
  vincent-yubi-primary.pub
# → PIN PIV demandé
# → touch Yubikey
# → certificat signé

La clé privée de la CA n'existe plus sur disque, elle est uniquement dans la Yubikey “CA Master” (qui doit avoir une jumelle de backup stockée en coffre).


Annexes

A. Commandes utiles de diagnostic

# Inspecter un certificat utilisateur
ssh-keygen -L -f id_ed25519_sk_yubi1-cert.pub
 
# Voir la KRL active sur un serveur
ssh-keygen -Q -f /etc/ssh/mis-revoked-keys -t krl
 
# Tester un certif spécifique contre la KRL
ssh-keygen -Q -f /etc/ssh/mis-revoked-keys -t krl id_ed25519_sk_yubi1-cert.pub
# Output: "id_ed25519_sk_yubi1-cert.pub: ok" ou "REVOKED"
 
# Côté serveur, voir quelles connexions par certificat
journalctl -u ssh | grep "Accepted publickey.*ID"
 
# Lister les clés résidentes sur une Yubikey
ssh-keygen -K
# Récupère les stubs sur le poste courant depuis la Yubikey

B. Format complet d'une signature ssh-keygen

ssh-keygen -s CA_PRIVATE_KEY \
  -I CERT_IDENTIFIER \
  -n PRINCIPAL1,PRINCIPAL2 \
  -V "+VALIDITY" \
  -z SERIAL \
  -O OPTION1 \
  -O OPTION2 \
  USER_PUBLIC_KEY.pub
Option Description
-s Chemin vers la clé privée de la CA
-I Identifiant lisible du certificat (visible dans logs sshd)
-n Principals (noms d'utilisateurs autorisés), séparés par virgule
-V Validité (+52w, +30d, +8h, 20260601:20270601)
-z Serial unique (entier)
-h Génère un certificat d'hôte (sinon utilisateur par défaut)
-O clear Reset les permissions par défaut
-O no-port-forwarding Désactive le port forwarding
-O no-agent-forwarding Désactive l'agent forwarding
-O no-X11-forwarding Désactive X11
-O permit-pty Autorise l'allocation PTY (interactif)
-O force-command=“…” Force l'exécution d'une commande spécifique
-O source-address=“10.0.0.0/8” Restreint l'origine IP

C. Liens utiles


Checklist de mise en place

Phase 0 - Préparation

  • [ ] Yubikeys commandées (minimum 2 par technicien + 1 vault)
  • [ ] PINs FIDO2 définis sur chaque Yubikey (via Yubikey Manager)
  • [ ] Bitwarden ready pour stockage des secrets

Phase 1-2 - CA

  • [ ] LXC mis-ssh-ca créée et durcie
  • [ ] CA users générée + passphrase robuste
  • [ ] CA hosts générée + passphrase robuste
  • [ ] Backup chiffré des CAs dans Bitwarden + offline
  • [ ] LXC éteinte par défaut, allumage à la demande

Phase 3 - Bootstrap parc

  • [ ] Compte break-glass mis-breakglass créé et clé déployée partout
  • [ ] Playbook Ansible mis-ssh-ca-deploy.yml testé sur 1-2 serveurs
  • [ ] Déploiement progressif sur le parc complet
  • [ ] Certificats d'hôtes générés pour les serveurs critiques

Phase 4 - Techniciens

  • [ ] Premières Yubikeys enrôlées (toi en priorité)
  • [ ] Tests de connexion validés
  • [ ] Configuration ~/.ssh/config documentée pour les techs

Phase 5+ - Industrialisation

  • [ ] Module Odoo makeitsimple_ssh_ca (modèles + wizards)
  • [ ] Intégration Semaphore pour déploiement KRL
  • [ ] Cron de notification d'expiration
  • [ ] Migration CA vers Yubikey PIV (à 6-12 mois)

Document maintenu par Make IT Simple - dernière révision : 2026

linux/ca-ssh.1780492595.txt.gz · Dernière modification : de root