CTFreak – L'ordonnanceur de tâches pour toutes vos machines

— Article en partenariat avec
—
Sauvegarder un dossier sur un serveur, vérifier l’espace disque du PC du salon, relancer un service sur le NAS, et j’en passe… Chez moi ça se concrétise au travers de crontabs différents et de tâches planifiées Windows, et malheureusement, comme je n’ai pas toujours le nez dessus, le jour où l’une d’elles tombe en rade, bah je m’en rends compte des jours, voire des semaines plus tard… Heureusement, il existe un outil qui s’appelle CTFreak et qui permet de centraliser tout ça derrière une seule interface web !
CTFreak, c’est donc un ordonnanceur de tâches auto-hébergé, édité en solo par Jean-Yves Pellé, un développeur français, et cela depuis presque 4 ans. Vous l’installez chez vous, il se connecte à vos machines en SSH ou en WinRM, et il y exécute tout ce que vous lui demandez. C’est top parce que grâce à ça, il n’y a même rien à installer sur les machines pilotées.
Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles.
En savoir plus
Voir cette vidéo sur YouTube
CTFreak vous propose ainsi 9 types de tâches à créer. La commande locale par exemple tourne sur la machine qui héberge CTFreak, et la commande distante fait la même chose mais sur un ensemble de machines de votre choix. Ensuite viennent les tâches de type scripts bash et PowerShell, les playbooks Ansible, les scripts SQL, ou encore les rapports SQL qui sortent de vrais tableaux et autres graphiques directement depuis vos bases de données (pratique pour illustrer vos rapports).
Il y a aussi la classique requête HTTP, pour taper sur une API ou vérifier qu’un site répond. Et surtout le "workflow", c’est-à-dire une tâche dont le boulot est d’en déclencher d’autres, en série ou en parallèle. Vous pouvez même imbriquer des workflows dans des workflows, si le cœur vous en dit, et surtout, si vous n’avez pas peur de vous y perdre.

Les neuf types de tâches proposés à la création, de la commande locale au rapport SQL
L’installation, c’est une minute chrono
Pour installer CTFreak, vous récupérez le binaire, vous le rendez exécutable, et c’est finito ! C’est un fichier unique de 56 Mo, sans la moindre dépendance, dispo en amd64 comme en arm64 (j’ai fait mes tests sur une Ubuntu 24.04 en ARM). Et il est également dispo en paquets Docker, Snap et Cloudron, mais ils tournent en bac à sable et n’embarquent pas Ansible, donc si les playbooks vous intéressent, restez sur le binaire. Comme l’URL de download se termine par l’architecture, pensez bien à remplacer amd64 par arm64 si votre machine est en ARM.
sudo curl -sL https://ctfreak.com/download/release/latest/linux/amd64 -o /usr/local/bin/ctfreak
sudo chmod +x /usr/local/bin/ctfreak
ctfreak run
Ouvrez ensuite http://IP-du-serveur:6700 et connectez vous avec admin / ctfreak. Changez ce mot de passe tout de suite dans le menu Profile, et surtout n’exposez pas ce port sur Internet sans un reverse proxy devant. En effet, cette interface va bientôt contenir les accès de toutes vos machines.
Ensuite pour en faire un service qui redémarre tout seul, copiez l’unité systemd de
dans /etc/systemd/system/ctfreak.service, puis activez-la.
sudo systemctl daemon-reload
sudo systemctl enable --now ctfreak
Et voilà, vous êtes prêts à commencer !
Votre première tâche planifiée
Tout se passe dans un projet, donc vous en créez un (j’ai appelé le mien Homelab), puis vous cliquez sur New task. Le plus simple pour commencer est la commande locale. Je lui ai collé une archive de mon dossier Documents, et coché Scheduled avec une expression cron pour 3h30 du matin.
tar -czf /home/korben/sauvegardes/documents-$(date +%F).tar.gz -C /home/korben Documents
Le bouton Execute permet de lancer la tâche tout de suite, pour ne pas attendre 3h30 pour savoir si ça marche, et la page d’exécution affiche le statut, la durée et le journal complet. La fiche du projet vous montre ensuite les deux informations qui manquent toujours avec cron : 1/ quand est ce que la tâche est passée pour la dernière fois, et 2/ si elle s’est bien terminée.
Le PC Windows en machine distante
Là où ça devient intéressant, c’est quand vous ajoutez d’autres machines. Côté CTFreak il n’y a aucun agent à déployer, mais côté cible il faut quand même activer le serveur SSH intégré de Windows (ou WinRM, au choix) et installer PowerShell 7.2 ou plus récent, sans quoi les journaux d’erreur remonteront mal. Vous enregistrez ensuite le mot de passe ou la clé dans Credentials, vous déclarez la machine dans Nodes avec son OS, son IP et son identifiant, et le bouton Ping vous dira tout de suite si la connexion passe.
Ensuite vous créez une tâche de type Powershell Script, moi je l’ai planifiée tous les lundis à 8h. Le champ Node Set filter accepte ensuite des noms de machines, mais surtout des tags : j’ai mis #windows, donc toute machine que je taguerai comme ça entrera dans la tâche sans que je la retouche. C’est bien fichu hein ?
$libre = [math]::Round((Get-PSDrive C).Free / 1GB, 1)
Write-Host "Espace libre sur C: $libre Go"
if ($libre -lt 30) { Write-Error "Alerte : moins de 30 Go libres" ; exit 1 }

Le script PowerShell, l’expression cron du lundi matin et le filtre #windows qui trouve une machine
Et le journal qui remonte ensuite est vraiment complet. On y retrouve chaque ligne horodatée à la microseconde, la sortie du script, et le code de retour qui décide du statut. Ma machine Windows n’ayant que 22,1 Go de libre, la tâche a échoué comme prévu et s’est affichée en rouge dans la liste.

Le journal de l’exécution ratée : la sortie du script sur la machine distante, puis la sortie en erreur
Tout ce qu’il y a autour
Alors bien sûr, une tâche qui plante sans prévenir personne, ça ne sert pas à grand-chose. C’est pourquoi CTFreak permet d’envoyer des alertes sur Discord, Slack, Mattermost, Microsoft Teams, Telegram, ntfy ou par mail. Il peut même ouvrir directement un ticket dans GitHub, GitLab, Jira, Linear ou YouTrack quand un truc casse.
Dans l’autre sens, chaque tâche expose un webhook entrant, ce qui permet de la déclencher depuis un dépôt Git ou n’importe quel outil tiers, et une API REST complète fait pareil mais par script.
Le reste ensuite, c’est que du confort qui se découvre quand on utilise l’outil… Il y a par exemple une explorateur de fichiers qui parcourt vos machines depuis le navigateur, des calendriers qui empêchent une tâche de tomber un jour férié, ou encore la possibilité de partager vos projets entre équipe avec différents droits d’accès. L’authentification passe même par votre fournisseur OpenID Connect si vous en avez un.
Et les données dans tout ça ?
Hé bien elles restent bien au chaud dans un dossier avec une base SQLite dedans. C’est pratique parce que, si vous voulez sauvegarder votre ordonnanceur, il suffit juste de faire une copie de ce dossier.
Ce que la version gratuite ne fait pas
Maintenant, avant de vous lancer, sachez que l’édition gratuite vous limite à 8 tâches, avec 1 paramètre par tâche, 3 utilisateurs, 1 calendrier, 1 notificateur d’alerte et 1 notificateur de tickets. Surtout, elle n’exécute rien en parallèle. Vos tâches passent une par une, quel que soit le nombre de machines visées. Par contre, bonne nouvelle, le nombre de machines pilotées n’est bridé dans aucune édition. Vous pouvez donc déclarer 3 nœuds comme 50 sur la version gratuite, c’est le nombre de tâches qui limité dans la version gratuite, mais pas la taille de votre parc.
Autre chose à savoir aussi, c’est que les secrets (mots de passe…etc) sont stockés tels quels en clair dans la base SQLite. C’est bien indiqué dans la documentation, donc ce n’est pas une surprise, mais heureusement, y’a une commande qui permet de basculer tout ça en AES-256-GCM :
sudo systemctl stop ctfreak && ctfreak encrypt AES && sudo systemctl start ctfreak
Faites-le, mais préférez quand même une clé SSH dédiée à un mot de passe de compte.
Côté tarifs, la page affiche l’édition Pro à 369 € la première année puis 299 €, la Business à 599 € puis 519 €, et la Sovereign à 899 € puis 799 € pour les environnements coupés d’Internet, le tout par instance.

Et si vous partez sur l’édition Pro, le code KORBEN15 vous fait 15 % de réduction sur la première année. Il est valable jusqu’au 31 octobre 2026 inclus.
Reste que pour du homelab, la version gratuite est
et suffit largement pour se faire une idée.
Source : korben.info