Quando si creano tunnel inversi su versioni recenti di OpenSSH, è possibile assegnare una porta remota pari a 0 per associare qualsiasi porta disponibile:
-R [indirizzo_indirizzamento:] porta: host: hostport
...
Se l'argomento port è "0", la porta di ascolto verrà allocata dinamicamente sul server e segnalata al client in fase di esecuzione.
Pagina man del client openssh ssh
La mia domanda è come posso (in modo automatizzato) determinare questa allocazione delle porte sul server. Sembra piuttosto inutile che venga segnalato all'host che esegue il client ssh, ma non alla destinazione, che vorrà effettuare connessioni a questa porta per accedere ai servizi sul client.
Sono in esecuzione due opzioni simili a cui riesco a pensare
# netstat -ntlp
sul server e cercare le porte sospette associate a 127.0.0.1 da sshd o guardando l'output di
# lsof -p $PPID | grep TCP | grep LISTEN
Ma nessuno di questi è piacevole dal punto di vista dell'automazione e non c'è modo di ricollegare le porte dinamiche alla porta del servizio di origine se viene creato più di un tunnel di questo tipo.
C'è qualcosa che mi manca per ottenere effettivamente un elenco di tunnel attivi (sia numeri di porta locali che remoti) sul lato server sshd, come un equivalente della variabile d'ambiente SSH_CONNECTION, ma per tunnel attivi?
Per alcuni contesti, sto cercando di creare potenzialmente molti tunnel inversi simultanei su un host, eseguendo il tunneling sullo stesso numero di porta su molti host diversi. Avere lo stack TCP gestire automaticamente il pool di porte sembra il modo più efficace per farlo.