Programmgesteuertes Hinzufügen von Portweiterleitungen in einer ControlMaster SSH-Sitzung

9

Ich habe gerade von der ControlMaster / ControlPath-Funktion von OpenSSH erfahren, mit der Sie eine einzige SSH-Verbindung verwenden können, um mehrere Terminals auszuführen.

Da ich häufig SSH verwende, um die Portweiterleitung zu verwenden, um verschlüsselte und authentifizierte VNC-Sitzungen zu erhalten, habe ich sofort erkannt, dass Sie einem Remoteserver, zu dem Sie bereits eine Verbindung hergestellt haben, keine Portweiterleitungen hinzufügen können. Das ist scheiße.

Manchmal fand ich später heraus, dass Sie diese Einschränkung umgehen können, indem Sie ~ C in einer laufenden SSH-Terminalsitzung eingeben. Dies öffnet eine Befehlszeile, in der Sie Portweiterleitungen hinzufügen oder entfernen können.

Meine Frage lautet nun: Wie kann ich Portweiterleitungen zu einer vorhandenen SSH-Sitzung hinzufügen, die die ControlMaster / ControlPath-Funktion verwendet, ohne auf eine Terminalsitzung innerhalb dieser SSH-Sitzung zugreifen zu müssen? Ich benötige dies, um mein Skript zu aktivieren, das eine sichere getunnelte VNC-Verbindung startet, damit ich seine Portweiterleitungen hinzufügen und später entfernen kann.

(Ich weiß, dass ich einen Terminal-Multiplexer wie GNU Screen oder tmux verwenden könnte, eigentlich mache ich das schon. Aber ich mag die Idee, aus mehreren Gründen nur eine SSH-Sitzung zu verwenden.)

aef
quelle
1
Ich werde gespannt sein, ob Sie einen Weg finden, dies zu tun, aber ich vermute, dass Sie dies nicht tun werden. Die programmgesteuerte Steuerung der Eigenschaften einer SSH-Sitzung, an der Sie nicht beteiligt sind, scheint ein großes Sicherheitsproblem zu sein.
Caleb
1
Unsinn! Wie führt die programmgesteuerte Steuerung der Eigenschaften einer SSH-Sitzung zu einem großen Sicherheitsproblem? Die Lösung ist wirklich ganz einfach: serverfault.com/a/340361/93109
aculich
Bei der Frage geht es jetzt nur noch um das Hinzufügen von Portweiterleitungen, damit die akzeptierte Antwort besser übereinstimmt. Ich stellte eine Frage, wie man sie danach hier entfernt: serverfault.com/q/457295/50950
aef

Antworten:

9

Das ist eigentlich ganz einfach. Fügen -O forwardSie einfach den Befehl ctl_cmd zu Ihrem vorhandenen Befehl hinzu.

ssh -M -L5555:localhost:22 remotehost

wird:

ssh -O forward -M -L5555:localhost:22 remotehost

In der sshManpage wird die -O ctl_cmdOption erläutert :

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

Dies setzt natürlich voraus, dass Sie entweder ControlMaster yesin Ihrer ~/ssh/configDatei oder -Min der Befehlszeile aktiviert haben .

aculich
quelle
1
Könnten Sie bitte versuchen, die verwandte Frage hier zu beantworten: serverfault.com/q/457295/50950
aef