Eu tenho uma pergunta sobre o túnel reverso do SSH.
Eu tenho um servidor Ubuntu com o sshd instalado.
Eu abro um túnel reverso SSH de uma máquina remota. Nessa máquina, a conexão é reiniciada toda vez que o túnel é interrompido.
Sempre que um túnel é aberto, no servidor SSH eu posso ver duas conexões quando estou usando netstat
. Uma conexão está escutando a porta do servidor interno. O outro está ouvindo em uma porta externa. O último é o túnel SSH.
Como exemplo:
dado 203.0.113.10: meu servidor SSH e 10.34.23.12 meu PC remoto, 5000 a porta no meu PC remoto eu gostaria de acessar a
ssh -R 1122:localhost:5000 serveruser@203.0.113.10
Agora do lado do servidor eu tenho duas conexões de escuta, que se parece com isso
tcp6 0 :::1122 :::* LISTEN
tcp6 0 0 203.0.113.10:22 10.34.23.12:62734 ESTABLISHED
Eu uso / corro o nc
comando do servidor, para verificar se o túnel funciona
nc -z -v -w5 127.0.0.1 1122
Às vezes acontece que a conexão externa morre, então meu netstat
saída será
`tcp6 0 0 203.0.113.10:22 10.34.23.12:62734 ESTABLISHED`
Existe uma maneira de verificar qual túnel não tem uma porta externa escutando?
Quer dizer, há uma maneira de verificar quando meu porto 1122 morre?
Minha solução seria matar o processo sshd vinculado ao túnel sem qualquer porta externa (10.34.23.12:62734). O problema é que eu tenho um outro túnel SSH nesta máquina que eu não gostaria de matar, então killall sshd
não seria uma opção.
Obrigado!
Editar 1:
Solução possível : O comando netstat -lptun (e o netstat -pant sugerido por Paul) faz a ligação que preciso para tentar resolver isso. Agora estou testando essa solução em produção.
#!/bin/sh
for pid in `lsof -i -n | egrep '\<ssh\>' | awk '{print $2}'`; do
foundpid="$(netstat -lptun | grep :::11 | grep $pid)"
if [ -z "$foundpid" ]
then
echo PID does not have any external port, killing the pid $pid
kill $pid
fi
done
netstat -pant
são ambas as linhas netstat pertencentes ao mesmo processo e diferentes do outro processo ssh que você deseja manter?