Jak określić port przydzielony na serwerze dla dynamicznie powiązanego tunelu zwrotnego openssh?


16

Podczas tworzenia tuneli zwrotnych w najnowszych wersjach OpenSSH można podać zdalny port 0 w celu powiązania dowolnego dostępnego portu:

-R [adres_powiązania:] port: host: port hosta

...

Jeśli argumentem portu jest „0”, port nasłuchiwania zostanie dynamicznie przydzielony na serwerze i zgłoszony klientowi w czasie wykonywania.

Strona klienta klienta openssh ssh

Moje pytanie brzmi: w jaki sposób (w sposób zautomatyzowany) mogę określić ten przydział portów na serwerze. Wydaje się raczej nieprzydatne, że jest zgłaszane do hosta z uruchomionym klientem ssh - ale nie do celu, który będzie chciał nawiązać połączenia z tym portem, aby uzyskać dostęp do usług na kliencie.

Dwie podobne opcje, o których myślę, są uruchomione

# netstat -ntlp

na serwerze i poszukaj podejrzanych portów powiązanych 127.0.0.1 przez sshd lub patrząc na wynik

# lsof -p $PPID | grep TCP | grep LISTEN

Ale żaden z nich nie jest przyjemny z punktu widzenia automatyzacji i nie ma żadnego sposobu na powiązanie portów dynamicznych z powrotem z portem usługi początkowej, jeśli utworzono więcej niż jeden taki tunel.

Czy brakuje mi czegoś, aby skutecznie uzyskać listę aktywnych tuneli (zarówno numerów portów lokalnych, jak i zdalnych) po stronie serwera sshd, podobnie jak odpowiednik zmiennej środowiskowej SSH_CONNECTION, ale dla aktywnych tuneli?

W pewnym kontekście próbuję utworzyć potencjalnie bardzo wiele jednoczesnych tuneli zwrotnych do hosta, tunelując z powrotem do tego samego numeru portu na wielu różnych hostach. Automatyczne zarządzanie pulą portów przez stos TCP wydaje się być najbardziej efektywnym sposobem na zrobienie tego.


Podczas korzystania ze składni „-R 0: xxxx: y”, ssh wyświetli „Przydzielony port 49488 do zdalnego przekazania do xxxx: y na stderr.
BlakBat

Tak, problem polega na tym, jak uzyskać te informacje po stronie serwera - gdzie byłoby to o wiele bardziej pomocne ...
codedstructure

Odpowiedzi:


1

Jeśli ustawisz „LogLevel” w pliku konfiguracyjnym sshd_config na DEBUG1 (lub na dowolnym poziomie DEBUG), sshd zarejestruje numery portów w /var/log/auth.log.

Pamiętaj, że użycie LogLevel DEBUG lub wyższej może być zagrożeniem dla prywatności, ponieważ wiele jest rejestrowanych.

(z /var/log/auth.log, usunięto kilka wierszy, aby wyświetlić odpowiednie informacje)

Jun 24 06:18:24 radon sshd[9334]: Connection from 192.168.13.10 port 39193
Jun 24 06:18:24 radon sshd[9334]: Accepted publickey for lornix from 192.168.13.10 port 39193 ssh2
Jun 24 06:18:24 radon sshd[9334]: pam_unix(sshd:session): session opened for user lornix by (uid=0)
Jun 24 06:18:24 radon sshd[9334]: User child is on pid 9339
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on 0.0.0.0 port 0.
Jun 24 06:18:24 radon sshd[9339]: debug1: Allocated listen port 39813
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 0: new [port listener]
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on :: port 39813.
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 1: new [port listener]
Jun 24 06:18:27 radon sshd[9339]: Received disconnect from 192.168.13.10: 11: disconnected by user

Jeśli to zrobisz, możesz zobaczyć, gdzie można przeanalizować informacje o połączeniu, a następnie port przekierowany (w tym przypadku 39813)

Użyłem tego wiersza poleceń między dwoma moimi komputerami, mam skonfigurowane logowanie za pomocą klucza ssh, więc nie ma monitów o podanie hasła ani opóźnień

-xenon- lornix:~> ssh -R "*:0:radon:22" -N -T radon
Allocated port 39813 for remote forward to radon:22

-N określa, że ​​nie podano polecenia, a -T zatrzymuje przydział tty dla tego połączenia.

Innym sposobem na rozpowszechnienie informacji o połączeniu z portem byłoby przeanalizowanie go po stronie klienta i wysłanie wiadomości e-mail, jabbera, wiadomości tekstowej, sygnałów dymu lub gołębia w celu dostarczenia numeru portu każdemu, kto tego potrzebuje.


0

Możesz podłączyć stderr sshdo programu, który otwiera połączenie z serwerem na maszynie docelowej i zgłasza jego nazwę / adres IP / numer seryjny / cokolwiek wraz z numerem portu. Coś w stylu:

% ssh -R "*:0:radon:22" -N -T radon 2>&1 | sed "s/^/`uname -n` /" | netcat radon 3743
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.