7.16. Konfigurowanie ssh (klient, serwer, tunelowanie)

Program ssh (Secure Shell) służy do logowania się na zdalne komputery (przez sieć) i zdalnego wykonywania komend. W przeciwieństwie do programów typu rsh czy telnet oferuje bezpieczną, szyfrowaną komunikację, uniemożliwia więc ewentualne podsłuchiwanie transmisji. Autoryzacja użytkownika może się odbywać na kilka sposobów. Najprostszym jest autoryzacja przy pomocy podawanego przez użytkownika hasła. Po uruchomieniu komendy:

ssh login@host
program pyta się o hasło. login oznacza tu nazwę użytkownika, a host nazwę komputera, np. kazik@mail.praterm.com.pl. Często przydatne jest, aby ssh nie pytał się o hasło - umożliwia to między innymi wygodne używanie ssh z programów nieinterakcyjnych (np. przez system BODAS).

Skonfigurowanie ssh wymaga kilku prostych kroków:

Plikiem konfiguracyjnym dla klienta ssh jest /etc/ssh/ssh_config. Oprócz wspomnianej wyżej wersji protokołu możemy ustawić globalnie kilka innych parametrów, między innymi.:

Wartości opcji z pliku konfiguracyjnego można także ustawiać bezpośrednio w linii poleceń, przy wywołaniu program ssh, używając następującej składni:
ssh -o StrictHostKeyChecking=no ondraszek@beta

Plikiem konfiguracyjnym dla serwera SSH jest plik /etc/ssh/sshd_config.

7.16.1. Tunel zwrotny SSH

Często jest potrzeba do dostania się maszyny "schowanej" za bramką internetową. W przypadku rozwiązań typu NAT lub Masquarading, bezpośrednie połączenie się ze schowanym komputerem z zewnątrz nie jest możliwe. Możliwa jest natomiast inicjalizacja połączenia ssh z docelowego komputera i zalogowanie się na niego przez tak zwany tunel zwrotny.

Tunel ten tworzymy wywołując na docelowym komputerze następujące polecenie:

ssh user@server -R 7777:localhost:22
Podany numer portu - 7777 - jest przykładowy. Może być to dowolny numer portu nieużywany na komputerze server. Takie polecenie spowoduje utworzenie tunelu zwrotnego - na docelowy komputer można się zalogować z komputera server przez wydanie polecenia:
ssh localhost -p 7777
Jeżeli tunel ma być aktywny przez dłuższy czas, warto uruchamiając tunel podać dodatkowe polecenie, którego aktywność zabezpieczy przez zerwaniem połączenia uznanego za nieużywane. Przykładowo:
ssh user@server -R 7777:localhost:22 "/bin/sh -c 'while true; do sleep 5; \
echo +; done'"

Jeszcze lepszym rozwiązaniem jest użycie programu autossh (w Debianie paczka o takiej samej nazwie). Program ten pozwala na uruchomienie tunelu z wykorzystaniem dodatkowego portu monitorującego - zerwane lub zablokowane połączenia są automatycznie wznawiane. Przykładowe wywołanie autossh mogłoby wyglądać następująco:

autossh -fN -M 7778 -R 7777:localhost:22 user@server
Opcja -f powoduje przejście autossh w tło, opcja -N jest przekazywana do ssh - zakazuje wykonywania komend - tylko przekierowywanie portów (zwiększa to bezpieczeństwo). Numer portu do monitorowania, tu przykładowo 7778, może być również dowolny, ale unikalny.

Oczywiście pozostaje problem, jak na docelowym komputerze, który jest niedostępny, uruchomić tunel. Możemy podyktować odpowiednie polecenie przez telefon, ale na dłuższą metę warto dodać albo odpowiednie wywołanie ssh np. do crontaba, albo uruchomienie autossh przez skrypty startowe systemu.

Notatka: Oprogramowanie SZARP zawiera zarówno gotowy skrypt ssh_tunel.sh, jak i paczkę szarp-tunnel, wykorzystującą autossh do uruchomienia tunelu zwrotnego.