Execução de um comando localmente após tunelamento ssh

2

Eu tenho um arquivo de script ./run_app.sh que contém o seguinte:

ssh -L 8888:localhost:8888 ubuntu@address
./run_website.sh   # it should be executed locally

mas tenta executar a segunda linha na máquina remota. Na verdade, quero executá-lo no meu pc. Alguma idéia?

    
por Super Hornet 05.10.2018 / 15:34

1 resposta

4

Olá e bem-vindo ao superusuário.

Depois de ssh -L 8888:localhost:8888 ubuntu@address , seu script se encontra no servidor remoto.

Você pode passar os sinalizadores -fN para ssh ( -f é para garfo no plano de fundo e -N é executar nenhum comando ).

Em seguida, após o túnel ser estabelecido , o seu script retoma a execução na próxima linha na sua máquina .

A desvantagem é que a ssh connection permanecerá em segundo plano mesmo depois que o script terminar.

Uma solução alternativa é ignorar o sinalizador -N e executar sleep 10 no servidor remoto:

ssh -f -L 8888:localhost:8888 ubuntu@address sleep 10

Desta forma, se o túnel não for usado, quando run_website.sh terminar ou após 10 segundos se o script não usar o túnel (isto é, falhar por algum motivo), ele será desconectado automaticamente.

Isso obviamente pressupõe que run_website.sh use o túnel.

Se você não se importa em terminar automaticamente o túnel, vá em frente e simplesmente use -fN :

ssh -fN -L 8888:localhost:8888 ubuntu@address

Você pode matar o processo ssh mais tarde, se precisar.

    
por 05.10.2018 / 15:47