Actualmente estoy escribiendo un script Bash que crea un túnel SSH. Una vez hecho esto, me gustaría que el script abra un nuevo shell interactivo local (!) para poder trabajar en mi sistema con el túnel SSH abierto.
Una vez que escribo, exit
el shell local debería cerrarse y el script original continuará ejecutándose.
Mi enfoque actual básicamente se ve así:
#!/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}
Hasta ahora, todo funciona, excepto ejecutar el shell local. De hecho, obtengo un caparazón e incluso puedo escribirlo, pero no sucede nada cuando presiono <Return>
.
¿Alguna idea de lo que estoy haciendo mal?
Respuesta1
Debe usarlo -f
para que la conexión pase a segundo plano una vez que se establezca. Entonces no necesitarás &
:
ssh -Nf -L xxx:xxx user@ip
y el procesamiento debería llegar a su bash
.