Obecnie prowadzę kilka:
sudo ssh -L PORT:IP:PORT root@IP
gdzie IP jest celem zabezpieczonej maszyny, a PORT reprezentuje porty, które przekazuję.
Dzieje się tak, ponieważ używam wielu aplikacji, do których nie mogę uzyskać dostępu bez tego przekazywania. Po wykonaniu tej czynności mogę uzyskać dostęp przez localhost:PORT
.
Główny problem pojawił się teraz, kiedy mam 4 z tych portów, które muszę przekazać.
Moim rozwiązaniem jest otwarcie 4 powłok i ciągłe przeszukiwanie historii wstecz w celu wyszukania dokładnie, które porty mają zostać przekierowane itp., A następnie uruchomienie tego polecenia - po jednej w każdej powłoce (konieczność wpisywania haseł itp.).
Gdybym tylko mógł zrobić coś takiego:
sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP
to już by naprawdę pomogło.
Czy istnieje sposób, aby to ułatwić?
źródło
Co dokładnie na odpowiedział NaN , podajesz wiele argumentów -L. Robię to cały czas. Oto przykład przekierowania wielu portów:
Uwaga : wygląda to tak samo, jak w
-L localhost:8822:REMOTE_IP_1:22
przypadku braku określenialocalhost
.Teraz możesz teraz (z innego terminala) zrobić:
do podłączenia do
REMOTE_IP_1
portu22
i podobnie
do połączenia
REMOTE_IP_2
portu22
Oczywiście nic nie stoi na przeszkodzie, aby zawrzeć to w skrypcie lub zautomatyzować, jeśli masz wiele różnych hostów / portów do przesłania i do niektórych konkretnych.
Mam nadzieję że to pomoże.
źródło
By default, anyone (even on different machines) can connect to the specified port on the SSH client machine. However, this can be restricted to programs on the same host by supplying a bind address: ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
ssh.com/ssh/tunneling/exampleMożesz użyć następującej funkcji bash (po prostu dodaj ją do swojego
~/.bashrc
):Przykład użycia:
źródło
-f
do biegania w tleOsoby, które przekazują wiele portów przez ten sam host, mogą ustawić coś takiego w swoim ~ / .ssh / config
Host all-port-forwards Hostname 10.122.0.3 User username LocalForward PORT_1 IP:PORT_1 LocalForward PORT_2 IP:PORT_2 LocalForward PORT_3 IP:PORT_3 LocalForward PORT_4 IP:PORT_4
i staje się to proste
ssh all-port-forwards
.źródło
jbchichoko i yuval podali realne rozwiązania. Ale odpowiedź jbchichoko nie jest elastyczną odpowiedzią jako funkcją, a otwarte tunele przez odpowiedź yuval nie mogą zostać zamknięte,
ctrl+c
ponieważ działają w tle. Poniżej podaję moje rozwiązanie rozwiązujące obie wady:Definiowanie funkcji w
~/.bashrc
lub~/.zshrc
:Przykład uruchomienia funkcji:
Wynik tego przykładu:
Możesz uzyskać dostęp
127.0.0.1:16000~16009
tak samo jakhostname:6000~6009
źródło
Jedną z zalet logowania do serwera z przekierowaniem portów jest ułatwienie korzystania z Jupyter Notebook. Ten link zawiera doskonały opis, jak to zrobić. Chciałbym tutaj zrobić podsumowanie i rozwinięcie, abyście wszyscy mogli się odnieść.
Sytuacja 1. Zaloguj się z lokalnego komputera o nazwie Host-A (np. Własnego laptopa) do zdalnej maszyny roboczej o nazwie Host-B.
Następnie możesz otworzyć przeglądarkę i wpisać: http: // localhost: port_A /, aby wykonać pracę na Host-B, ale zobaczyć to w Host-A.
Sytuacja 2. Zaloguj się z lokalnego komputera o nazwie Host-A (np. Własnego laptopa) do zdalnego komputera logowania o nazwie Host-B i stamtąd zaloguj się do zdalnego komputera roboczego o nazwie Host-C. Zwykle dzieje się tak w przypadku większości serwerów analitycznych na uczelniach i można to osiągnąć za pomocą dwóch
ssh -L
połączonych z-t
.Następnie możesz otworzyć przeglądarkę i wpisać: http: // localhost: port_A /, aby wykonać pracę na Host-C, ale zobaczyć to w Host-A.
Sytuacja 3. Zaloguj się z lokalnego komputera o nazwie Host-A (np. Własnego laptopa) do zdalnego komputera logowania o nazwie Host-B i stamtąd zaloguj się na zdalnej maszynie o nazwie Host-C i na koniec zaloguj się do zdalnego komputera roboczego Host- RE. Zwykle tak nie jest, ale może się kiedyś zdarzyć. Jest to rozszerzenie sytuacji 2 i tę samą logikę można zastosować na większej liczbie maszyn.
Następnie możesz otworzyć przeglądarkę i wpisać: http: // localhost: port_A / aby wykonać pracę na Host-D, ale zobaczyć to w Host-A.
Zauważ, że port_A, port_B, port_C, port_D mogą być liczbami losowymi, z wyjątkiem wspólnych numerów portów wymienionych tutaj . W sytuacji 1 port_A i port_B mogą być takie same, aby uprościć procedurę.
źródło
W mojej firmie zarówno ja, jak i członkowie mojego zespołu potrzebujemy dostępu do 3 portów nieosiągalnego serwera „docelowego”, więc utworzyłem stały tunel (czyli tunel, który może działać w tle w nieskończoność, patrz parametry
-f
i-N
) z serwera osiągalnego do cel. W wierszu poleceń osiągalnego serwera wykonałem:Użyłem użytkownika,
root
ale Twój własny będzie działał. Będziesz musiał wprowadzić hasło wybranego użytkownika (nawet jeśli jesteś już połączony z osiągalnym serwerem z tym użytkownikiem).Teraz port 8822 dostępnej maszyny odpowiada portowi 22 docelowego (dla ssh / PuTTY / WinSCP), a porty 9006 i 9100 na osiągalnej maszynie odpowiadają tym samym portom docelowym (obsługują dwie usługi sieciowe w moim przypadku ).
źródło
Opracowałem loco do pomocy przy przekazywaniu ssh. Może być używany do lokalnego udostępniania portów 5000 i 7000 na tych samych portach:
źródło
Jeśli potrzebujesz prostego rozwiązania działającego w tle i łatwego do zabicia - użyj gniazda sterującego
źródło
Oto rozwiązanie zainspirowane rozwiązaniem Yuvala Atzmona.
Ma kilka zalet w stosunku do początkowego rozwiązania:
Możesz go używać jako:
I wreszcie zabij ich wszystkich
tnlkill
.źródło
Możesz użyć tej funkcji zsh (prawdopodobnie działa też z bashem) (wstaw ją
~/.zshrc
):Przykłady:
ashL [email protected] 6480 7690 7477
ashL [email protected] {6000..6050} # Forwards the whole range. This is simply shell syntax sugar.
źródło