Ausführung eines Befehls lokal nach dem ssh-Tunneling und der ssh-Verbindung in der Konsole

547
Ne Nenne

Es ist eine Fortsetzung der Frage: Ausführung eines Befehls lokal nach dem ssh-Tunneln " .

Ich habe so etwas:

ssh -f -L 555:localhost:555 10.0.0.1 sleep 10 vncviewer 

In diesem Fall wechselt die ssh-Verbindung jedoch in den Hintergrund, und ich kann keine Befehle auf der Remote-Maschine ausführen.

Meine Frage ist also, wie kann ich in einer SSH-Konsole bleiben und vncviewer ausführen? In meinem Fall ist es TigerVNC.

0
Gibt es einen Grund, warum Sie `vncviewer` nicht vor` ssh` ausführen können (zB im Hintergrund)? Vielleicht müssen Sie zuerst den Tunnel einrichten. Habe ich richtig geraten? Kamil Maciorowski vor 6 Jahren 0
Ja genau. Für "vncviewer" habe ich ein Skript, das die Eingabe von der Befehlszeile übernimmt, wie "./myserverssh vnc". Wenn es das Schlüsselwort "vnc" gibt, möchte ich, dass ssh console und vnc gestartet werden. Wenn mein Befehl nur "./myserverssh" lautet, möchte ich, dass nur die ssh-Konsole gestartet wird. Natürlich könnte es funktionieren, wenn ich vnc zuerst starte, aber falls keine Verbindung hergestellt wird, müsste ich vncviewer manuell schließen. Es ist keine große Sache, aber ich würde lieber herausfinden, ob es eine Möglichkeit gibt, es richtig zu machen. Ne Nenne vor 6 Jahren 0

1 Antwort auf die Frage

1
Kamil Maciorowski

Wenn Sie den Tunnel wirklich erst einrichten und vncviewerspäter ausführen müssen und erst dann zur Remote-Konsole gelangen, ist dies das grundlegende Skript:

#!/bin/sh  tmpd="$(mktemp -d)" || exit 1 # temporary directory creation srvr=10.0.0.1 # remote server sckt="$tmpd"/"$$-$".socket # control socket for SSH connection sharing  clean() { rm -rf "$tmpd"; } # cleaning function, removes the temporary directory  # establishing SSH master connection ssh -o ControlMaster=yes \ -o ControlPath="$sckt" \ -o ExitOnForwardFailure=yes \ -Nf -L 555:localhost:555 "$srvr" || { clean; exit 2; }  # the tunnel is now established vncviewer >/dev/null 2>&1 & # silent custom command in the background ssh -o ControlPath="$sckt" "$srvr" # reusing the master connection # (exit the remote shell to continue) wait $! # waiting for vncviewer to terminate ssh -o ControlPath="$sckt" \ -O exit "$srvr" # terminating the master connection clean || exit 4 # removing the temporary directory 

Getestet auf einem Kubuntu-Client, der eine Verbindung zum Debian-Server herstellt. Ich bin nicht sicher, wie robust es ist. Behandle es als Konzeptnachweis. Siehe man 1 sshund man 5 ssh_configfür Details.

Wunderbar Funktioniert einwandfrei. Vielen Dank. Ne Nenne vor 6 Jahren 0