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.
fonte
Respostas:
Se você definir o 'LogLevel' no arquivo de configuração sshd_config como DEBUG1 (ou qualquer nível de DEBUG), o sshd registrará os números da porta em /var/log/auth.log.
Lembre-se de que o uso de um LogLevel de DEBUG ou superior pode ser um risco de privacidade, uma vez que muito está registrado.
(de /var/log/auth.log, removeu algumas linhas para mostrar informações relevantes)
Se você segui-lo, poderá ver onde pode analisar as informações de conexão e, em seguida, a porta encaminhada (39813 neste caso)
Eu usei essa linha de comando entre duas de minhas máquinas, tenho o login da chave ssh configurado, portanto, nenhuma solicitação de senha ou atraso
-N especifica que nenhum comando é dado e -T interrompe a alocação de um tty para esta conexão.
Outra maneira de disseminar as informações de conexão da porta seria analisá-las do lado do cliente e enviar um e-mail, tagarelar, mensagem de texto, sinais de fumaça ou pombo para transportar a porta # para quem precisar.
fonte
Você pode canalizar o stderr de
ssh
um programa que abre uma conexão com um servidor na máquina de destino e relata o nome da máquina / endereço IP / número de série / o que for, juntamente com o número da porta. Mais ou menos assim:fonte