Ao criar túneis reversos em versões recentes do OpenSSH, uma porta remota de 0 pode ser fornecida para ligar qualquer porta disponível:
-R [bind_address:] porta: host: hostport
...
Se o argumento da porta for `0 ', a porta de escuta será alocada dinamicamente no servidor e relatada ao cliente em tempo de execução.
página de manual do cliente openssh ssh
Minha pergunta é como eu posso (de forma automatizada) determinar essa alocação de porta no servidor. Parece inútil que seja relatado ao host que está executando o cliente ssh - mas não ao destino, que desejará fazer conexões com essa porta para acessar serviços no cliente.
Duas opções semelhantes em que posso pensar estão em execução
# netstat -ntlp
no servidor e procure por portas suspeitas ligadas ao 127.0.0.1 pelo sshd ou olhando a saída de
# lsof -p $PPID | grep TCP | grep LISTEN
Mas nenhuma dessas opções é agradável do ponto de vista da automação e não há como vincular as portas dinâmicas à porta de serviço de origem se mais de um desses túneis forem criados.
Falta alguma coisa para obter efetivamente uma lista de túneis ativos (números de porta local e remota) no lado do servidor sshd, como um equivalente à variável de ambiente SSH_CONNECTION, mas para túneis ativos?
Para algum contexto, estou tentando criar potencialmente muitos túneis reversos simultâneos para um host, retornando o túnel para o mesmo número de porta em muitos hosts diferentes. Ter a pilha TCP gerenciando automaticamente o pool de portas parece ser a maneira mais eficaz de fazer isso.