Lors de la création de tunnels inverses sur les versions récentes d'OpenSSH, un port distant de 0 peut être attribué pour lier n'importe quel port disponible:
-R [bind_address:] port: hôte: port hôte
...
Si l'argument du port est «0», le port d'écoute sera alloué dynamiquement sur le serveur et signalé au client au moment de l'exécution.
page de manuel du client openssh ssh
Ma question est de savoir comment je peux (de manière automatisée) déterminer cette allocation de port sur le serveur. Il semble plutôt inutile qu'il soit signalé à l'hôte exécutant le client ssh - mais pas à la cible, qui voudra établir des connexions à ce port pour accéder aux services sur le client.
Deux options similaires auxquelles je peux penser sont en cours d'exécution
# netstat -ntlp
sur le serveur et recherchez les ports suspects liés sur 127.0.0.1 par sshd ou en regardant la sortie de
# lsof -p $PPID | grep TCP | grep LISTEN
Mais aucun de ces éléments n'est agréable du point de vue de l'automatisation, et il n'y a aucun moyen de rattacher les ports dynamiques au port de service d'origine si plusieurs tunnels de ce type sont créés.
Y a-t-il quelque chose qui me manque pour obtenir efficacement une liste des tunnels actifs (à la fois les numéros de port locaux et distants) côté serveur sshd, comme un équivalent à la variable d'environnement SSH_CONNECTION, mais pour les tunnels actifs?
Pour un certain contexte, j'essaie de créer potentiellement de très nombreux tunnels inverses simultanés vers un hôte, en tunnelant vers le même numéro de port sur de nombreux hôtes différents. La gestion automatique du pool de ports par la pile TCP semble être le moyen le plus efficace de procéder.