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, 0
sobald 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?
quelle
ProxyCommand
probiert und mit IO weitergeleitet-W
? Es ist viel weniger chaotisch und viel sicherer, wenn es die Bastion erlaubt.Antworten:
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
Führen Sie das Skript in Ihrer
ssh
Sitzung aus.quelle
Wie wäre es mit diesem hässlichen Stück Code:
quelle