Execução de um comando localmente após tunelamento ssh e conexão ssh permanecendo no console

0

É uma continuação para a pergunta: Execução de um comando localmente após o ssh tunelamento ".

Eu tenho algo assim:

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

No entanto, nesse caso, a conexão ssh vai para o segundo plano e não posso executar nenhum comando na máquina remota.

Então, minha pergunta é: como posso ficar em um console do ssh e executar o vncviewer? No meu caso, é TigerVNC.

    
por Ne Nenne 11.10.2018 / 21:47

1 resposta

1

Se você realmente precisa estabelecer o primeiro túnel e executar vncviewer mais tarde e só então chegar ao console remoto, este é o script básico:

#!/bin/sh

tmpd="$(mktemp -d)" || exit 1         # temporary directory creation
srvr=10.0.0.1                         # remote server
sckt="$tmpd"/"$$-${srvr}".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

Testado no cliente Kubuntu conectando-se ao servidor Debian. Não tenho certeza de quão robusto é. Trate-o como uma prova de conceito. Veja man 1 ssh e man 5 ssh_config para detalhes.

    
por 11.10.2018 / 23:24