SSH Double Hop mit Port Forward und Remote-Befehl, der sofort zurückkehrt

0

Ich habe einen Remote-Host hinter einer Bastion, zu der ich den Port weiterleiten muss. Ich habe Folgendes gefunden:

bastion=xyz.com
user=$( whoami )

function doSSH () {

    ssh $user@$bastion -t -A \
        -L 5900:127.0.0.1:5900 \
        ssh $user@$1 -t -A \
            -L 5900:127.0.0.1:5900 \
            '/opt/enableVNC && while [ 1 ]; do echo "Keeping forwards alive..." && sleep 60; done'
}

Das Problem, dem ich gegenüberstehe, ist, dass ich nach dem SSHing zum Remote-Knoten ein Skript ausführen muss, das den VNC-Server auf dem Knoten aktiviert. Leider wird dieses Skript in Kürze zurückgegeben, 0sobald der Server betriebsbereit ist. Das Skript, das ich aufrufe, ist kein blockierendes Skript, und die ssh-Sitzung wird beendet, obwohl ich den Port für die Weiterleitung eingerichtet habe.

$ doSSH node1
user@xyz.com's password:
user@node1's password:
  VNC is now Enabled
  Listening on 127.0.0.1:5900
Connection to node1 closed.
Keeping forwards alive...
Keeping forwards alive...

Es scheint, als ob die Verbindung zum zweiten Host sofort unterbrochen wird, nachdem der erste Teil des Befehls zurückgegeben wurde, und ich kann die Verbindung zum zweiten Host nicht offen halten.

Wie kann ich meine Portweiterleitung aufrechterhalten, nachdem ich einen Anruf getätigt habe, der sofort zurückkehrt?

Matt Clark
quelle
Hast du das mit ProxyCommandprobiert und mit IO weitergeleitet -W? Es ist viel weniger chaotisch und viel sicherer, wenn es die Bastion erlaubt.
Jakuje

Antworten:

0

Ich gehe davon aus, dass Sie die Anführungszeichen beim Ausführen des Befehls verwendet haben (andernfalls wird die while-Schleife lokal ausgeführt). Können Sie ein Skript auf dem Remote-Host erstellen? In diesem Fall können Sie ein Skript erstellen

#!/usr/bin/env bash
/opt/enableVNC && while [ 1 ]; do sleep 1; done

Führen Sie das Skript in Ihrer sshSitzung aus.

lungj
quelle
Ja, ich führe den Befehl in Anführungszeichen aus. Die Schleife scheint derzeit auf der Bastion zu laufen, nachdem die Sitzung vom Knoten bei der Rückkehr des Skripts existiert. Ich hatte gehofft, dies als ein einzelnes dynamisches Skript vom Endbenutzer ausführen zu lassen und nicht das bereits weit verbreitete Linux-Image modifizieren zu müssen.
Matt Clark
Versuchte, dass sie nicht ..
Matt Clark
0

Wie wäre es mit diesem hässlichen Stück Code:

bastion=xyz.com
user=$( whoami )

function doSSH () {

    ssh $user@$bastion -t -A \
        -L 5900:127.0.0.1:5900 \
        'bash -c "ssh '$user'@'$1' -t -A \
            -L 5900:127.0.0.1:5900 \
            bash -c \"/opt/enableVNC  && while [ 1 ]; do echo Keeping forwards alive... && sleep 60; done\""'
}
lungj
quelle