Під час створення зворотних тунелів на останніх версіях OpenSSH може бути наданий віддалений порт 0 для прив’язки будь-якого доступного порту:
-R [bind_address:] порт: host: hostport
...
Якщо аргумент порту дорівнює 0, порт прослуховування буде динамічно розподілятися на сервері та повідомлятися клієнтові під час виконання.
Opensh ssh клієнтську сторінку
Моє запитання полягає в тому, як я можу (автоматизовано) визначити цей розподіл портів на сервері. Здається, досить нецікаво, що про це повідомляється хосту, який працює з ssh-клієнтом, але не до цілі, яка захоче встановити з'єднання з цим портом для доступу до послуг клієнта.
Два подібні варіанти, про які я можу придумати, або працюють
# netstat -ntlp
на сервері та шукайте підозрілі порти, прив'язані до 127.0.0.1 sshd або дивлячись на вихід
# lsof -p $PPID | grep TCP | grep LISTEN
Але жодне з них не приємне з точки зору автоматизації, і немає жодного способу прив’язання динамічних портів до порту служби походження, якщо створено більше одного такого тунелю.
Чи щось мені не вистачає, щоб ефективно отримати список активних тунелів (як локальних, так і віддалених номерів портів) на стороні сервера sshd, як еквівалент змінної середовища SSH_CONNECTION, але для активних тунелів?
Для певного контексту я намагаюся створити потенційно дуже багато одночасних зворотних тунелів до хоста, тунелюючи назад до того ж номера порту на багатьох різних хостах. Наявність TCP стека автоматично керувати пулом портів, здається, найбільш ефективний спосіб зробити це.