Ssh umożliwia tunelowanie portów, co oznacza iż możemy tunelować usługi same w sobie nie zawierające szyfrowania (czyli narażone na podsłuchanie) przez tunel postawiony przez Ssh (czyli szyfrowany). Nie jesteśmy w stanie postawić tunelu dwustronnego, tzn. aby z jednej strony i drugiej strony wysyłać jednocześnie dane, lub np. robić to naprzemiennie, jesteśmy natomiast w stanie zabezpieczyć połączenie jednostronnie, tzn. albo z lokalnego komputera do zdalnego serwera albo ze zdalnego serwera do lokalnego komputera.
W przypadku połączenia lokalnego serwera do zdalnego serwera korzystamy ze składni:
ssh -L port_lokalny:adres_serwera_zdalnego:port_zdalny adres_serwera_zdalnego
Natomiast gdy chcemy zdalny port serwera przenieść (ang. forwarding) na lokalny komputer korzystamy ze składni:
ssh -R port_lokalny:adres_serwera_zdalnego:port_zdalny adres_serwera_zdalnego
Przykład 1: Załóżmy iż mamy adres 10.0.0.12 i odbieramy pocztę przez nieszyfrowany protokół POP3 z serwera o adresie 10.0.0.120 ale chcielibyśmy robić to połączeniem szyfrowanym (tunelowanym) przez ssh. Dane będą przesyłane od nas do serwera więc wybierzemy opcję z -L, czyli otworzymy u nas port 110 i stwórzmy tunel na port 110 do serwera.
Wersja 1 (tunelowanie lokalne) ----------- ----------- | 10.0.0.12 | | 10.0.0.120| | serwer | -----------/siec\ -----------| serwer | | | 110 (tcp) 110(tcp) | | ----------- ----------- Regułka: ssh -L 110:10.0.0.120:110 10.0.0.120
Od tej chwili pocztę odbieramy z lokalnego portu 110 a nie z portu zdalnego 110.
Zmodyfikujmy troszeczkę nasz przykład, niech poczta będzie odbierana u nas przez port 112:
ssh -L 112:10.0.0.120:110 10.0.0.120