Como remover um bind de porta ainda usado pelo sshd após uma desconexão imprópria do ssh?

2

Note: this post is not a duplicate of SSH remote port forwarding failed. The question here is not what causes port forwarding (temporarily) failure, we know what it is. The question is how to remove the broken sshd port bind. Thank you.

Eu tenho um servidor A com um IP dinâmico executando autossh para manter um túnel reverso para uma máquina B com um IP estático. O código a seguir funciona bem:

autossh -M 0 -q -N -R2222:localhost:22 -o ServerAliveInterval 60 -o   ServerAliveCountMax 3 -o ExitOnForwardFailure yes USER@B -p PORT

No entanto, quando a conexão falha devido a uma alteração de IP de A, é preciso um tempo "longo" (digamos, uma hora) para recuperar a conexão. Isso porque o sshd da máquina B ainda escuta a porta 2222, evitando assim que o ssh (da máquina A) ligue a porta 2222 após o travamento.

auth.log de B contém dezenas de:

Accepted publickey for USER from A port SOMEPORT ssh2: ED25519 XXXXXXXX
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 2222

Até que a conexão seja finalmente aceita sem falha de encaminhamento (causando o autossh parando de recuperar o ssh, como esperado), porque o sshd finalmente não escuta a porta 2222.

Como eu poderia (pelo menos manualmente) dizer ao sshd (na máquina B) que ele não deveria mais escutar a porta 2222, então eu posso recuperar a conexão sem esperar uma hora (e sem reiniciar a máquina B)?

PS: reiniciar o sshd não resolve o problema.

PPS: ExitOnForwardFailure yes funciona para mim mesmo sem o = .

    
por hello world 24.08.2017 / 05:24

0 respostas