Eu acredito que isso funcionará (trabalhei em meus experimentos, embora eu pudesse interromper a conexão manualmente, então não tenho certeza se repliquei exatamente o cenário do seu pipe quebrado):
ssh -o ExitOnForwardFailure=true -R 9000:localhost:9000 -Nf remote-server
O principal truque é que você está criando uma conexão ssh "independente" apenas para o propósito de encaminhamento de porta e colocando-a em segundo plano ( -Nf
options). Desta forma, quando a conexão termina (tubo quebrado, por exemplo), deve liberar a porta.
A opção ExitOnForwardFailure
está lá apenas para que, na próxima vez que você tentar fazer uma conexão, você veja no STDOUT o fato de que a porta ainda está aberta no servidor. Se você ainda precisa fazer algo mais complicado para matar manualmente a conexão no servidor, você pode usar o código de saída de uma falha ssh
com a opção ExitOnForwardFailure
para fazer algo mais complicado.