
Sebastian Kurfürst | 20.12.2021
Ich hatte schon hin und wieder das Problem, dass ich einige SSH-Verbindungen auf andere Systeme offen hatte, und ausversehen auf dem falschen System einen Befehl ausgelöst habe. Meist geht so etwas glimpflich ab, aber ich habe auf diesem Weg auch schon einiges an Schaden angerichtet. Was kann man also tun, um dieses Problem zu reduzieren?
Mein Ziel habe ich in einem vorherigen Blog Post schon mal beschrieben: visuell erkennen, auf welchem System ich mich befinde.
In Teil 1 des Blog Posts habe ich das Grundprinzip beschrieben: Die Verwendung von Shell Escape Codes zum Einblenden von Overlays bei iTerm2.
Die skizzierte Lösung hatte jedoch mehrere gravierende Probleme, wenn andere Tools wie Git oder Ansible über SSH funktionieren mussten. Dabei musste jeder Git-Server, wie auch jeder Server der mit Ansible deployt werden sollte, explizit vom dargestellten Script ausgenommen werden, da das Script (durch das Injecten von Escapesequenzen) Fehler bei Git oder Ansible produziert hatte.
Nun bin ich vor einigen Tagen auf einen Blog Post gestoßen, wo die SSH-Config-Direktive Match erläutert wurde: Diese Einstellung ermöglicht es, eine Art "Konfigurations-Overlay" über die normale SSH-Konfiguration zu legen. Um zu entscheiden, ob der "Overlay" aktiviert oder deaktiviert ist, kann man ein beliebiges Script hinterlegen.
Nun hatte ich die Idee, in der Prozesshierarchie - ausgehend vom SSH-Prozess selbst - weiter "hoch" zu schauen (die Eltern des SSH-Prozesses, etc); um herauszufinden, ob der SSH-Befehl gerade im Kontext einer interaktiven Shell (in meinem Fall ZSH) oder in einem anderen Kontext wie Ansible oder Git ausgeführt wurde. Dies macht die Zeile:
ps p $(ps p $$ -o ppid | grep -v PPID) -o ppid | grep -v PPID | xargs -r ps ww | grep zsh
(das habe ich iterativ entwickelt; siehe unten 😉)
Damit das ganze funktioniert, muss noch diese Helfer-Anwendung installiert werden:
Folgende Zeilen zeigen den aktuellen Host als Badge in iTerm2, und machen auch Ansible, Git, etc. nicht kaputt:
Viel Spaß damit!
Dein Besuch auf unserer Website produziert laut der Messung auf websitecarbon.com nur 0,28 g CO₂.