H ILYGO Hawser
Retour au site

Snippets et inspection

Enregistrer vos commandes récurrentes, les rejouer sur le bon serveur, et lire l'état d'une machine sans rien taper.

À quoi sert un snippet

Un snippet est un bloc de commandes shell enregistré dans votre coffre : un nom, une étiquette, une description et un contenu sur autant de lignes que nécessaire. Il se rejoue dans un terminal ouvert, à l'ouverture d'une connexion, ou hors session sur un canal exec.

Le contenu est chiffré au même titre qu'un mot de passe, à l'intérieur du fichier .ivault (voir Ce qui est chiffré). L'écriture est synchrone : le message de confirmation n'apparaît qu'une fois les octets sur le disque.

La vue s'ouvre depuis le rail de navigation gauche, bouton 🧩 Snippets, cinquième icône. C'est le seul chemin : il n'y a ni entrée de menu macOS, ni raccourci clavier pour cette vue.

Vue Snippets avec plusieurs tuiles, chacune portant un nom, une pastille d'étiquette et les boutons Run, éditer et supprimer.
La ligne sous le nom affiche la description. Si vous l'avez laissée vide, Hawser y met la première ligne du contenu — une raison de commencer vos snippets par un commentaire parlant.

Créer un snippet

  1. Vue Snippets → bouton + Snippet en haut à droite. Depuis une autre vue, ⌘K puis New snippet fait la même chose.
  2. Remplissez les quatre champs de la modale New snippet.
  3. Cliquez Save. Le message Snippet saved confirme l'enregistrement et la liste se rafraîchit.
ChampCe qu'il fait
NameLe nom affiché dans la liste, dans la palette ⌘K et dans le sélecteur numéroté d'un onglet. Obligatoire.
TagUne étiquette libre (ops, diag…), affichée en pastille. C'est l'un des deux seuls champs sur lesquels porte la recherche.
DescriptionUne ligne d'explication affichée sous le nom.
ContenuLes commandes elles-mêmes. Obligatoire. Le libellé complet du champ est Contenu (multi-lignes, supporte {{host}} {{user}} {{port}} {{date}}).

Si le nom ou le contenu manque, le message Name and body required s'affiche en rouge et rien n'est enregistré. Si le coffre s'est verrouillé entre l'ouverture de la modale et le clic sur Save, c'est no vault open qui apparaît : déverrouillez, puis recommencez la saisie — elle n'est pas conservée.

Le bouton ✏️ d'une tuile rouvre la même modale, titre Edit snippet, champs préremplis. Le bouton 🗑️ demande confirmation (Delete "<nom>"?) avant de retirer l'entrée.

Les quatre variables

Quatre motifs sont remplacés dans le contenu, à chaque exécution et non à l'enregistrement, d'après la fiche de l'hôte visé. Toutes les occurrences sont remplacées.

  • {{host}} — le champ Host de la fiche
  • {{user}} — le champ User
  • {{port}} — le port
  • {{date}} — la date et l'heure UTC au format ISO, par exemple 2026-08-12T14:23:45.678Z
echo "=== Rapport {{host}} — {{date}} ==="
df -h | sort -k5 -r | head -12

Exécuter un snippet dans une session ouverte

Trois chemins mènent au même résultat : le contenu interpolé est tapé dans le terminal, suivi d'un retour chariot, exactement comme si vous l'aviez collé. Un contenu multi-lignes s'exécute donc ligne après ligne.

  • Vue Snippets → bouton ▶️ Run sur la tuile.
  • ⌘K → taper un fragment du nom ou de la description → Entrée. Les snippets y portent l'étiquette SNIPPET.
  • Dans un onglet SSH connecté : dernier bouton de la barre du terminal, 🧩, après 🔄, ⏺️, 📊 Server, 🐳 Docker, ☸️ K8s.

Le sélecteur du bouton 🧩 ouvre une modale Run snippet qui liste vos snippets numérotés (1. …, 2. …) et attend que vous tapiez le numéro dans le champ Enter snippet number. Ce n'est pas une liste cliquable. Un numéro vide, non numérique ou hors liste ne déclenche rien et n'affiche aucun message : la modale se ferme, il ne se passe rien. Sans aucun snippet enregistré, le bouton répond No snippets defined.

Exécuter un snippet sans session ouverte

Si aucun onglet SSH n'est ouvert, ▶️ Run change de comportement : Hawser ouvre une connexion transitoire, exécute la commande sur un canal exec (l'équivalent de ssh serveur "commande"), referme, et affiche le résultat.

  1. Vue Snippets▶️ Run.
  2. Lisez la confirmation Run "<snippet>" via SSH (ssh-exec) on "<hôte>" ? et vérifiez le nom d'hôte qu'elle annonce.
  3. Cliquez Run. La modale Snippet output affiche STDOUT:, puis STDERR: si la sortie d'erreur n'est pas vide, puis une ligne Exit:.
Vue Sessions vide, sans aucun onglet de connexion ouvert.
Vue Sessions sans onglet : c'est dans cet état que ▶️ Run ouvre une connexion transitoire au lieu de viser un terminal.

Ce canal n'est pas un shell de connexion : le PATH est celui du démon SSH, pas celui de votre ~/.bashrc. Un binaire ajouté au PATH par votre profil ne sera pas trouvé, et un sudo interactif ne peut pas recevoir de mot de passe.

Messages d'erreur possibles, en rouge : No connections SSH (aucun onglet SSH ouvert et aucun hôte SSH dans le coffre), Host introuvable, Clé SSH introuvable (vérifie l'host) si la clé référencée par la fiche a été supprimée, Jump host introuvable, jump host chain too deep au-delà de quatre rebonds.

Lancer des snippets à l'ouverture d'une connexion

Une fiche d'hôte SSH peut désigner des snippets à jouer automatiquement dès que le shell est prêt.

  1. Vue Hosts✏️ sur la carte de l'hôte (voir Ajouter un serveur).
  2. Onglet Advanced de la fiche → champ Snippets de démarrage (un par ligne), sous-titré Exécutés à l'ouverture d'un shell SSH.
  3. Cliquez un snippet pour le sélectionner, Cmd-clic pour en ajouter d'autres.
  4. Save. À la prochaine ouverture d'un shell, les snippets choisis partent dans le terminal une demi-seconde après la connexion.
  • L'ordre d'exécution est celui de la liste, pas celui dans lequel vous avez cliqué.
  • Les snippets de démarrage sont rejoués à chaque reconnexion automatique après coupure et à chaque appui sur 🔄. Évitez donc tout ce qui n'est pas rejouable sans dommage.
  • Un onglet déjà ouvert garde la fiche telle qu'elle était à son ouverture : modifier la sélection n'a d'effet qu'au prochain onglet.
  • Le champ n'existe pas pour les hôtes FTP et Telnet.

Retrouver et organiser ses snippets

Le champ de recherche de la barre du haut filtre la liste à la frappe, sur le nom et l'étiquette uniquement. La description et le contenu ne sont pas fouillés. La palette ⌘K, elle, cherche sur le nom et la description, mais pas sur l'étiquette. Une même chaîne ne donne donc pas toujours les mêmes résultats des deux côtés.

Avec la synchronisation cloud, les snippets voyagent chiffrés avec le reste du coffre. Le serveur apprend combien vous en avez, jamais leur nom ni leur contenu. Ils ne comptent pas dans le quota d'éléments : créer un snippet n'est jamais refusé, même sur le forfait gratuit.

Les tableaux de bord d'inspection

Trois boutons de la barre d'un onglet SSH interrogent la machine distante et mettent le résultat en forme, sans rien taper. Les trois fonctionnent. Ils n'apparaissent que sur un onglet SSH : un onglet SFTP, FTP ou Telnet n'en a pas.

Mécanique commune : chaque section ouvre une nouvelle connexion SSH, exécute sa commande sur un canal exec, puis se déconnecte. Le shell de votre onglet n'est jamais utilisé. Comptez neuf connexions successives pour 📊 Server, huit pour ☸️ K8s, une seule pour 🐳 Docker.

📊 Server

Neuf sections remplies l'une après l'autre, avec un compteur n / 9 et un état par section (⏳ en attente, récupération…, ✓ chargé, ⚠ erreur) : OS et noyau, Uptime · charge, CPU, Mémoire, Disque, Top processus par mémoire, Top processus par CPU, Réseau, Sessions actives. Les commandes ont un repli macOS quand la variante Linux n'existe pas. Ce tableau de bord ne tente jamais sudo et ne demande aucun privilège particulier.

🐳 Docker

Une seule commande composée ramène docker info, docker ps -a, docker stats et docker system df. L'écran affiche l'en-tête Docker stack avec le nombre de conteneurs, d'images et l'espace utilisé, quatre tuiles Running / CPU / Memory / Network, puis la liste des conteneurs avec leur pastille de santé. Un bouton ↻ Refresh relance la capture, un lien Sortie brute montre la réponse non interprétée.

Si le démon refuse l'accès au socket, Hawser le détecte et propose 🔒 Docker — accès refusé avec les boutons Réessayer avec sudo et Annuler, puis offre de mémoriser la préférence sur la fiche de l'hôte. La même mécanique existe pour ☸️ K8s, sous le titre Activer sudo pour kubectl.

☸️ K8s

Huit sections en texte brut, compteur n / 8 : cluster-info, nœuds, espaces de noms, pods, services, déploiements, ingress, PVC. Le serveur doit avoir kubectl dans le PATH du démon SSH et un kubeconfig lisible sans variable d'environnement, donc ~/.kube/config.

Cas concret : un serveur qui répond mal