Hop doppio SSH con port forward e comando remoto che ritorna immediatamente


0

Ho un host remoto dietro un bastione a cui devo impostare il port forwarding, ho pensato a quanto segue:

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'
}

Il problema che sto affrontando è che dopo SSHing sul nodo remoto, devo eseguire uno script che ha abilitato il server VNC sul nodo, sfortunatamente, questo script ritorna a breve 0una volta che il server è attivo e in esecuzione. Lo script che sto chiamando non è uno script di blocco e la sessione ssh termina, anche se ho stabilito il port forward.

$ 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...

Sembra che la connessione al secondo host venga interrotta immediatamente dopo il ritorno della prima parte del comando e non riesco a mantenere aperta la connessione al secondo host.

Come posso mantenere il mio port forward stabilito dopo aver effettuato una chiamata che ritorna immediatamente?


Hai provato con ProxyCommande inoltro IO con -W? È molto meno disordinato e molto più sicuro, se consentito dal bastione.
Jakuje,

Risposte:


0

Suppongo che tu abbia usato le virgolette durante l'esecuzione del comando (altrimenti, il ciclo while viene eseguito localmente). Sei in grado di creare uno script sull'host remoto? In tal caso, potresti creare uno script

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

Ed esegui lo script nella tua sshsessione.


Sì, sto eseguendo il comando tra virgolette. Il ciclo attualmente sembra funzionare sul bastione, dopo che la sessione dal nodo esiste al ritorno dello script. Speravo di avere questo come un singolo script dinamico eseguito dall'utente finale e di non dover modificare l'immagine linux già ampiamente distribuita.
Matt Clark,

Ci ho provato, non ..
Matt Clark,

0

Che ne dici di questo brutto pezzo di codice:

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\""'
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.