execute como sudo:
sudo netstat -tulpna | grep PORTNUM
A última coluna mostrará o PID / sshd
sudo kill -9 PID
concluído.
Eu tenho alguns dispositivos que podem ser atendidos por meio de um servidor.
Como os dispositivos se conectam por meio de uma rede GPRS com conexões de entrada bloqueadas, faço com que eles verifiquem com o servidor a intervalos de alguns minutos. O servidor responderá se um túnel ssh reverso for necessário para a equipe de suporte e lidará com uma porta disponível no servidor.
Quando essa porta for manipulada para o dispositivo cliente, o dispositivo abrirá um túnel ssh reverso em uma conta de usuário limitada (sem shell disponível devido à diretiva command="/sbin/nologin"
no arquivo authorized_keys
) com este comando:
ssh -fN -R $AVAILABLE_PORT:localhost:22 srvUsername@srvHost -i Indentity
No servidor, posso ver que a porta disponível foi usada com netstat -tulpn
com uma saída assim:
tcp 0 0 127.0.0.1:PORT 0.0.0.0:* LISTEN -
tcp 0 0 ::1:PORT :::* LISTEN -
E essa porta permanecerá escutando, a menos que eu mate o processo ssh na máquina cliente que o abriu.
Mas, de tempos em tempos (principalmente durante problemas de rede), mesmo se eu matar o processo ou desligar a máquina cliente, esta porta continuará escutando no servidor.
Existe uma maneira de fechar esse socket do lado do servidor sem reiniciar o serviço ssh?
As conexões GPRS são instáveis, por isso posso ter uma situação em que usei todas as minhas portas disponíveis e precise esperar até que elas expirem. Também estou confiando que os clientes matam com sucesso o processo ssh quando a conexão não é mais necessária. Eu gostaria de fazer isso no lado do servidor.
execute como sudo:
sudo netstat -tulpna | grep PORTNUM
A última coluna mostrará o PID / sshd
sudo kill -9 PID
concluído.