Execute um shell interativo a partir de um script bash

Execute um shell interativo a partir de um script bash

Atualmente estou escrevendo um script Bash que cria um túnel SSH. Feito isso, gostaria que o script abrisse um novo shell interativo local (!) Para que eu possa trabalhar em meu sistema com o túnel SSH aberto.

Depois de digitar, exito shell local deve ser fechado e o script original continua em execução.

Minha abordagem atual basicamente se parece com isto:

#!/usr/bin/env bash

set -e

ssh -N user@ip -L xxx:xxx &
SSH_CONNECTION=${!}

trap "kill ${SSH_CONNECTION}" ERR

sleep 3
bash -i

kill ${SSH_CONNECTION}

Até agora, tudo funciona - exceto executar o shell local. Na verdade, recebo um shell e posso até digitá-lo, mas nada acontece quando clico em <Return>.

Alguma ideia do que estou fazendo de errado?

Responder1

Você precisa usar -fpara que a conexão vá para segundo plano assim que for estabelecida. Então você não precisará de &:

ssh -Nf  -L xxx:xxx user@ip

e o processamento deve entrar no seu arquivo bash.

informação relacionada