SSH double hop com porta em frente e comando remoto que retorna imediatamente

0

Eu tenho um host remoto atrás de um bastião que eu preciso configurar para a frente, eu vim com o seguinte:

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

O problema que estou enfrentando é que, após o SSHing para o nó remoto, eu devo executar um script que ativou o servidor VNC no nó, infelizmente, esse script retorna em breve 0 quando o servidor estiver em funcionamento. O script que estou chamando não é um script de bloqueio, e a sessão ssh chega ao fim, embora eu tenha estabelecido o encaminhamento de porta.

$ doSSH node1
[email protected]'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...

Parece que a conexão com o segundo host é interrompida imediatamente após a primeira parte do comando retornar, e eu não posso manter a conexão aberta para o segundo host.

Como posso manter minha porta estabelecida depois de fazer uma chamada que retorna imediatamente?

Matt Clark
fonte
Você tentou isso com ProxyCommand e IO encaminhamento com -W? É muito menos confuso e muito mais seguro, se for permitido pelo bastião.
Jakuje

Respostas:

0

Estou assumindo que você usou aspas ao executar o comando (caso contrário, o loop while será executado localmente). Você consegue criar um script no host remoto? Em caso afirmativo, você poderia criar um script

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

E execute o script em seu ssh sessão.

lungj
fonte
Sim, estou executando o comando entre aspas. O loop atualmente parece rodar no bastião, após a sessão do nó existir no retorno do script. Eu estava esperando para ter isso como um único script dinâmico executado pelo usuário final, e não tem que modificar a imagem linux já amplamente distribuída.
Matt Clark
Tentei isso, eles não fizeram ..
Matt Clark
0

Que tal esse pedaço feio de código:

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
fonte