Túnel de vários saltos:
Estou abrindo um túnel para um servidor remoto por meio de um servidor de salto.
ssh ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
ssh ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}
Agora, quando eu abrir uma conexão com localhost:port
, ela encaminhará para jump:port
, que por sua vez encaminhará para remote:port
Executar o túnel local em segundo plano:
O problema é que ele abre um shell em remote
, enquanto eu quero que o túnel seja executado em segundo plano.
Portanto, adiciono a opção -f
ao meu túnel local para solicitar que ele seja executado em segundo plano
ssh -f ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
ssh ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}
Isso, no entanto, retorna um erro:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Presumivelmente, este erro está vindo do túnel de jump
para remote
e é causado porque stdin
está fechado quando meu túnel local é daemonizado.
Indique o túnel remoto Não vou executar um comando:
Eu então tentei executar o túnel jump-> remote
com -N
para dizer que não vou executar um comando remoto.
ssh -f ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
ssh -N ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}
Isso funciona muito bem - o túnel é executado em segundo plano e eu posso me conectar com sucesso a remote:port
conectando-se a localhost:port
.
Problema:
O problema que estou tendo é quando eu quero fechar os túneis.
Se eu enviar um sinal de morte para o pid do meu ssh local, ele será fechado, mas o túnel ssh em execução no jump
continuará em execução.
Parece que quando eu daemonize meu túnel local, o túnel em jump
também é daemonizado.
Pergunta:
É possível executar o meu túnel local em segundo plano, mas quando eu o mato, ele tem que desligar todos os túneis que ele gerou em todos os servidores remotos?