Estou chamando ssh (OpenSSH) de um aplicativo OSX / Linux-C ++ - via fork / exec para criar um encaminhamento de porta dinâmico. Isso é feito usando o modo em lote (-o BatchMode = yes) e uma chave privada fornecida ao ssh (-i Option). A chamada SSH em si não abre um shell (-N Opção).
Esta é a minha chamada SSH completa:
ssh -N -D 9000 -o BatchMode=yes -i /path/to/private-key user@host
Gostaria de prosseguir com meu aplicativo assim que possível e, portanto, tenho que descobrir se o ssh conseguiu criar o canal. O próprio SSH retornará apenas se houver um problema.
Existe a possibilidade de detectar um encaminhamento de porta bem-sucedido?
É claro que posso esperar até que a porta seja aberta pelo SSH, mas estou procurando uma solução mais elegante. Outra solução é inspecionar o Log (-v) do SSH aguardando "Entrando na sessão interativa", mas isso não me parece muito portátil.
Acho que encontrei outra solução (também hackiana). Ao iniciar o SSH com
ele criará apenas o soquete do domínio de controle e estabeleceu com êxito a conexão. Então, eu teria que esperar o soquete do domínio aparecer no sistema de arquivos. Ainda não é bonito, mas isso parece mais robusto do que esperar que um soquete de rede apareça.
Curiosamente, isso também pode ser usado para descobrir o PID do mestre (consulte a Resposta da R.). Usando
fonte