
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, exit
o 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 -f
para 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
.