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.
źródło
Odpowiedzi:
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)
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ń
-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.
źródło
Możesz podłączyć stderr
ssh
do 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:źródło