Aufrufen eines lokalen Befehls bei jeder erfolgreichen Verbindung bei Verwendung von ssh-Multiplexing?

978
Shabble

Ich möchte automatisch einen Befehl ausführen, wenn ich mich per SSH erfolgreich mit einem Remote-Host verbinde.

Ich kann dies für die erste Verbindung zu jedem Host mit den Einträgen PermitLocalCommand yesund tun, ähnlich wie in dieser Antwort, aber ich verwende auch eine ziemlich aggressive ssh-Multiplexing-Konfiguration (etwa die folgende):LocalCommand ~/bin/ssh-notify-me~/.ssh/config

Host * PermitLocalCommand yes ServerAliveCountMax 2 ServerAliveInterval 5 ControlPath ~/.ssh/mux/%r@%h:%p ControlMaster auto ControlPersist 1h 

Bei diesem Setup wird LocalCommand nur für die erste Verbindung ausgeführt, bevor eine Control Master / Mux-Buchse vorhanden ist. Danach stelle ich eine Verbindung her, aber der Befehl wird nicht ausgeführt.

Gibt es eine Möglichkeit (ohne das Multiplexen zu deaktivieren), um sicherzustellen, dass LocalCommand oder ein Äquivalent bei jeder neuen interaktiven Sitzung auftritt?

Das Umschließen von sshBinärdateien in eine Shell-Funktion oder ein Skript scheint nicht zu funktionieren, da es nicht wissen kann, ob die Verbindung erfolgreich war, bevor sie abgeschlossen ist.

4
Wenn Sie "jede neue Sitzung" sagen, bedeutet dies nur interaktive Sitzungen (bei denen Sie eine Befehlszeile auf dem Remote-Server erhalten). Oder umfasst es nicht interaktive Sitzungen? Wie wäre es mit SCP-Sitzungen? SFTP-Sitzungen? Erzeugt dieser Befehl eine Ausgabe an das Terminal? Kenster vor 9 Jahren 0
@Kenster: Entschuldigung, ja. Ich meinte jede interaktive Sitzung (also normale `ssh foo` und` ssh foo -t)`, aber nicht scp / irgendetwas anderes, das kein pty zugeteilt bekommt. Bearbeitete Frage zur Klarstellung. Shabble vor 9 Jahren 0
Bei jedem erfolgreichen Verbindungsaufbau wird automatisch ein Befehl ausgeführt. - Und genau das passiert. `man 5 ssh_config` sagt über` ControlMaster`: `Ermöglicht das Teilen mehrerer Sitzungen über eine einzige Netzwerkverbindung`. Es gibt also nur eine Verbindung. Der Master-Prozess "ssh" erstellt (verbindet), jedes nachfolgende "ssh" verwendet es. Ich verstehe, was Sie erreichen wollen. Mein Punkt ist, dass Sie das Wort "Verbindung" verwenden, wobei "Sitzung" das ist, was Sie meinen. Kamil Maciorowski vor 5 Jahren 0

0 Antworten auf die Frage