Exploitation & administration de serveurs

Administrer un parc de serveurs Linux sans perdre le fil

Administrer un serveur Linux à distance ne pose aucun problème quand il y en a un. À dix, les mêmes gestes deviennent coûteux : retrouver l'accès, refaire un durcissement de mémoire, savoir ce qui a changé depuis la semaine dernière. Cette page rassemble ce qui tient dans la durée : l'état des lieux d'une machine, le durcissement SSH, l'accès sans port ouvert, les runbooks, et la trace de chaque intervention.

07 sections06 questions
01

Par où commencer quand on hérite d'un serveur qu'on n'a pas installé ?

Par un état des lieux en lecture seule, avant la moindre modification. Distribution et noyau en cours, unités en échec, ports en écoute, comptes disposant d'un shell, clés SSH autorisées, tâches planifiées, remplissage des disques. Une heure d'inventaire évite une intervention à l'aveugle le jour où la machine tombe.

L'ordre compte. On regarde d'abord ce qui écoute sur le réseau, parce que c'est la surface exposée immédiate ; ensuite ce qui démarre au boot, parce que c'est ce qui reviendra après un redémarrage ; enfin ce qui consomme, parce qu'un disque plein produit des pannes qu'aucun journal applicatif n'annonce. Un serveur récupéré d'un prestataire précédent contient presque toujours une clé publique oubliée dans un fichier authorized_keys, ou une tâche cron qui pousse des données vers un endroit que personne ne surveille plus.

Le constat ne vaut que s'il est écrit quelque part. Un inventaire tapé dans un terminal disparaît avec l'onglet. Le minimum utile tient en quelques lignes par machine : rôle, propriétaire, ce qui tourne, ce qu'on a le droit de redémarrer et qui prévenir. C'est ce document, pas la mémoire de l'opérateur, qui tient debout à trois heures du matin.

  • 01ss -tulpn : ce qui écoute et le processus propriétaire, à confronter avec ce que vous croyez exposer.
  • 02systemctl list-units --failed et systemctl list-timers : les services morts et les tâches planifiées qu'on a oubliées.
  • 03getent passwd, les règles sudo et chaque fichier authorized_keys : qui peut entrer, et avec quels droits.
  • 04journalctl -p err -b : les erreurs du démarrage courant, avant qu'elles ne deviennent un incident.
  • 05df -h et du -xh --max-depth=1 /var : le disque plein reste la panne la plus banale et la plus évitable.
02

Comment durcir SSH sans se verrouiller dehors ?

En gardant une session ouverte pendant toute l'opération, en validant la configuration avec sshd -t avant de recharger le service, et en testant la connexion depuis un second terminal avant de fermer le premier. Un rechargement ne coupe pas les sessions établies ; un redémarrage sur une configuration fautive, si.

Le durcissement tient en peu de directives. Une fois vos clés déposées et vérifiées : PasswordAuthentication no, KbdInteractiveAuthentication no, PermitRootLogin prohibit-password ou no, AllowUsers ou AllowGroups pour restreindre explicitement les comptes, MaxAuthTries bas, LoginGraceTime court, redirection d'agent désactivée par défaut. Sur les distributions récentes, écrivez ces réglages dans un fichier dédié de /etc/ssh/sshd_config.d/ plutôt que dans le fichier livré par le paquet : la prochaine mise à jour ne les écrasera pas.

Déplacer le port 22 réduit le volume de tentatives enregistrées, pas le risque réel : un scan ciblé retrouve le service en quelques secondes. Le gain est ailleurs, dans des journaux redevenus lisibles. Ce qui sécurise vraiment un VPS, c'est l'authentification par clé, le bannissement des adresses fautives avec fail2ban, un pare-feu qui n'ouvre que le nécessaire, et les mises à jour de sécurité appliquées sans intervention humaine. La documentation OpenSSH et les guides d'hygiène de l'ANSSI restent les deux références à garder ouvertes pendant l'opération.

  • 01Déposer votre clé publique et vérifier qu'elle fonctionne avant de couper l'authentification par mot de passe.
  • 02Écrire les directives dans un fichier sous /etc/ssh/sshd_config.d/, jamais dans le fichier livré par la distribution.
  • 03Valider avec sshd -t, recharger, puis ouvrir une seconde session pour tester : la première reste votre issue de secours.
  • 04Prévoir un accès hors bande (console série ou KVM de l'hébergeur) avant de toucher aux règles de pare-feu.
03

Comment atteindre une machine derrière un NAT ou un VPN sans ouvrir de port ?

Trois voies existent : exposer le service SSH sur Internet, passer par un rebond avec ProxyJump vers un bastion, ou faire en sorte que la machine initie elle-même la connexion, via un réseau chiffré comme WireGuard ou Tailscale, ou via un agent sortant. Les deux dernières ne demandent aucun port entrant.

Ce qui décide de la surface exposée est simple : qui initie la connexion. Un port en écoute sur une adresse publique est scanné en continu, quel que soit son numéro, et doit être défendu en permanence. Une connexion établie depuis la machine vers un point de rendez-vous n'est atteignable par personne depuis l'extérieur : il n'y a rien à trouver. C'est le même raisonnement qui fait préférer un tunnel sortant à une redirection de port dans un réseau d'entreprise dont on ne contrôle pas le pare-feu périmétrique.

Le bastion garde un avantage : il centralise les accès et les journaux, donc l'audit. Ses défauts sont connus, un point unique de défaillance et une cible de choix. Le tunnel sortant, lui, déplace la question de la confiance vers le point de rendez-vous : que voit-il passer, et que conserve-t-il ? C'est la question à poser à tout outil d'accès distant, y compris à un terminal web SSH : détient-il vos identifiants, sous quelle forme, et qui peut les déchiffrer ?

04

Qu'est-ce qui distingue un runbook utile d'une note qu'on ne rouvre jamais ?

Un runbook d'administration système utile a un déclencheur explicite, des préconditions vérifiables, des commandes copiables sans adaptation mentale, une vérification finale qui échoue si l'opération a échoué, et une procédure de retour arrière. Sans ces cinq éléments, c'est une note, pas une procédure.

Le bon moment pour l'écrire est la première exécution : c'est là qu'on sait encore pourquoi telle option est présente et quelle erreur on a rencontrée. Le bon moment pour le corriger est la deuxième, quand apparaît l'écart entre ce qui est écrit et ce qu'on tape réellement. Un runbook qui n'a pas été rejoué depuis six mois doit être tenu pour faux jusqu'à preuve du contraire.

L'idempotence change tout : une procédure qu'on peut relancer sans casser l'existant se relit sereinement en pleine nuit. En pratique, cela veut dire tester avant de créer, écrire des fichiers de configuration complets plutôt qu'ajouter des lignes à la suite, et recharger un service plutôt que le redémarrer quand c'est possible. Il faut aussi dire ce que le runbook ne couvre pas : le cas où la vérification finale échoue mérite une ligne, même si cette ligne se contente de dire qui appeler.

  • 01Déclencheur : dans quelle situation on ouvre ce runbook, et dans lesquelles on ne l'ouvre pas.
  • 02Préconditions : version du système, service concerné, copie de la configuration existante.
  • 03Commandes exactes, dans l'ordre, sans variable implicite laissée à l'interprétation du lecteur.
  • 04Vérification : une commande dont le code de retour dit si l'opération a réussi.
  • 05Retour arrière : comment revenir à l'état précédent, et à partir de quand il est trop tard.
05

Comment gérer plusieurs serveurs sans refaire dix fois le même geste ?

En séparant deux besoins qu'on confond souvent : maintenir un état désiré, qui relève de la gestion de configuration déclarative, et intervenir en direct, qui relève de l'exploitation. Un outil comme Ansible fait converger une flotte ; il ne remplace pas la session ouverte pendant un incident, à deux heures du matin.

Pour gérer plusieurs serveurs sans dérive, trois habitudes couvrent l'essentiel. Une convention de nommage qui dit le rôle et l'environnement, parce que l'erreur la plus coûteuse reste la bonne commande sur la mauvaise machine. Un inventaire à jour qui sert de source unique, plutôt que trois fichiers contradictoires. Un historique par machine, qui permet de répondre à « qu'est-ce qui a changé depuis la semaine dernière ? » sans reconstituer le passé de mémoire.

L'outillage d'exploitation se juge alors sur trois points : peut-on appliquer la même opération à un groupe de machines, retrouve-t-on ce qui a été fait sur une machine donnée, et voit-on son état courant au même endroit ? C'est le trou que Servor cherche à combler. Les 27 runbooks officiels livrés (nginx, Caddy, Apache, PostgreSQL, MySQL, Redis, Docker, Podman, WireGuard, Tailscale, durcissement SSH, fail2ban, UFW, mises à jour automatiques, entre autres) transforment les opérations courantes en procédures rejouables, et chaque exécution rejoint un historique unifié avec sa sortie, son code de retour et sa durée.

06

Qui a lancé cette commande, sur quelle machine, et avec quel résultat ?

L'historique du shell ne répond pas à la question : il est propre à un utilisateur, modifiable par lui, tronqué par la rotation, et muet sur le résultat obtenu. Une trace d'exploitation exploitable enregistre l'opérateur, la machine, la commande exacte, l'horodatage, le code de retour et la sortie.

Les briques système existent : journalisation de sudo, auditd pour les appels sensibles, journald exporté vers un collecteur distant pour qu'une compromission locale n'efface pas les preuves. Elles répondent bien à un audit de conformité, moins bien à la question quotidienne d'une équipe, qui est de savoir ce qui a été fait hier soir sur cette machine, par qui, et si ça a fonctionné. C'est un besoin d'exploitation avant d'être un besoin de sécurité.

Servor enregistre chaque commande au même endroit quelle que soit son origine, saisie manuelle, runbook, terminal ou copilote IA, avec sa sortie, son code de retour et sa durée. S'y ajoute un journal d'audit chaîné par empreintes, protégé en écriture seule au niveau de la base : une entrée ne peut être ni modifiée ni supprimée. Pour une agence qui intervient sur les serveurs de plusieurs clients, c'est la différence entre affirmer ce qui a été fait et le montrer.

07

Qu'est-ce que Servor change dans l'exploitation quotidienne d'un parc ?

Servor réunit dans une seule console le terminal, les commandes, le monitoring, les status pages et les runbooks de tous vos serveurs, avec un copilote IA qui propose une action, attend votre validation, puis vérifie le résultat. Le périmètre est celui de l'exploitation : accéder à la machine, y opérer, la surveiller, communiquer son état, tracer qui a fait quoi. Servor ne déploie pas d'application et ne provisionne pas d'infrastructure ; il exploite les serveurs que vous avez déjà, aux côtés de vos propres outils de déploiement.

L'accès passe par un agent installé sur la machine, un binaire compilé unique fourni pour sept cibles (Linux x64 et arm64, en glibc et musl, macOS x64 et arm64, Windows x64). Il n'ouvre aucun port : c'est lui qui établit une connexion sortante, ce qui le fait fonctionner derrière un NAT, un pare-feu d'entreprise ou un réseau VPN-only. Il s'exécute sous l'utilisateur système configuré et ne reçoit jamais d'identifiant. Le terminal web est ré-attachable, donc fermer l'onglet ne tue pas le shell, et une commande lancée depuis le formulaire va au bout même si le navigateur se déconnecte. Le même agent pousse ses métriques toutes les 15 à 300 secondes et exécute les vérifications lui-même, ce qui les rend indépendantes d'une session ouverte : neuf types disponibles, de HTTP au certificat SSL en passant par l'espace disque et le script personnalisé, avec une hystérésis configurable pour ne pas basculer sur un faux positif.

Reste le traitement des identifiants, qui est le point sensible d'une console d'administration. La phrase secrète, la clé dérivée par Argon2id et la clé privée X25519 ne quittent pas le navigateur ; les secrets sont chiffrés en AES-256-GCM, et chaque commande est signée côté client avec une clé Ed25519 dérivée du coffre, puis vérifiée sur la machine cible. Conséquence directe : le serveur ne peut pas lire vos identifiants, et une compromission du plan de contrôle ne permet pas de forger une exécution. La contrepartie est assumée et il faut la connaître avant de s'engager, puisque perdre à la fois la phrase secrète et la phrase de récupération de 24 mots rend les données définitivement irrécupérables.

  • 01Copilote IA en trois modes : Plan valide commande par commande et sert de défaut, Ask reste en lecture de fait, Auto n'interrompt que sur une commande destructrice. Les garde-fous réduisent le risque, ils ne le suppriment pas.
  • 02Mode strict : un serveur peut être installé en supervision seule, le plan de contrôle refusant alors toute exécution.
  • 03Offres : Free pour deux serveurs, Operations à 9 € HT par mois pour un nombre de serveurs illimité avec 100 monitors et 5 status pages, AI à 29 € HT par mois avec le copilote et 3 000 crédits mensuels.
  • 04Hors périmètre, à savoir avant de tester : ni sauvegarde ni restauration gérées par le produit, pas de provisioning chez un hébergeur, et des vérifications lancées depuis un seul point d'observation.
Agent et exécution
Cibles de l'agent
7 — Linux x64/arm64 (glibc, musl), macOS x64/arm64, Windows x64
Ports entrants
aucun — connexion sortante initiée par la machine
Métriques
poussées toutes les 15 à 300 secondes
Vérifications
9 types, exécutés par l'agent
Runbooks officiels
27 livrés
Chiffrement
Argon2id → X25519 → AES-256-GCM, dans le navigateur
Signature d'exécution
Ed25519, vérifiée sur la machine cible
08

Questions fréquentes

Non. Un rebond par bastion avec ProxyJump, un réseau chiffré type WireGuard ou Tailscale, ou un agent qui initie une connexion sortante donnent le même accès sans port entrant. Ce qui écoute sur une adresse publique doit être défendu en permanence ; ce qui appelle vers l'extérieur n'est pas joignable depuis Internet.

Cela réduit le bruit des scans automatisés et rend les journaux relisibles, rien de plus : un scan ciblé retrouve le service en quelques secondes. Pour sécuriser un VPS, l'authentification par clé, la désactivation du mot de passe, la restriction des comptes autorisés et les mises à jour de sécurité automatiques pèsent beaucoup plus lourd.

Tout dépend de qui détient la clé et de l'endroit où elle est déchiffrée. La question à poser à l'éditeur est précise : la phrase secrète ou la clé privée transitent-elles par ses serveurs ? Dans Servor, la dérivation et le déchiffrement ont lieu dans le navigateur, et chaque commande est signée côté client puis vérifiée sur la machine cible.

Le seuil dépend moins du nombre de machines que du nombre d'opérateurs. Seul sur trois VPS, un fichier de notes et un bon ~/.ssh/config tiennent longtemps. À deux personnes ou plus sur les mêmes machines, l'historique partagé et la traçabilité des interventions deviennent le vrai besoin.

Non, les deux répondent à des besoins différents. La gestion de configuration fait converger une flotte vers un état désiré, de façon déclarative. Servor sert à l'exploitation courante : accéder, exécuter, superviser, tracer, communiquer un incident. Les deux cohabitent sans se marcher dessus.

En mode Plan, celui par défaut, chaque commande est approuvée dans l'interface avant exécution ; Ask reste en lecture de fait et Auto n'interrompt que sur une commande destructrice. Une liste de commandes interdites est appliquée côté serveur et côté agent, et chaque exécution est journalisée. L'opérateur reste responsable de ce qui part sur la machine.

Reprendre la main sur votre parc

Installez l'agent sur une première machine et jugez sur pièce : terminal ré-attachable, exécution tracée, runbooks et supervision au même endroit. L'offre Free couvre deux serveurs, sans engagement.

Commencer gratuitement