Bezpieczna wymiana danych SSH

SSH, czyli secure shell (bezpieczna powłoka), to program służący do bezpiecznej, zdalnej pracy na komputerze z systemem uniksowym. Nie każdy jest jednak świadom innych możliwości SSH, takich jak bezpieczna praca ze zdalnymi plikami czy możliwość zautomatyzowanego wykonywania komend na zdalnym komputerze, bez konieczności logowania.
SSH pracuje w trybie klient-serwer. Oznacza to, że na komputerze, do którego chcemy się łączyć, należy zainstalować i wystartować serwer SSH (/etc/init.d/ssh start) oraz, jeśli to konieczne, odblokować na firewallu port 22, z którego domyślnie korzysta protokół SSH.
Po tej operacji powinniśmy już móc zalogować się na zdalny serwer, na konto istniejącego na nim użytkownika:
ssh user@serwer.polska.pl
Jeśli po podaniu hasła pojawił się zmieniony prompt w stylu użytkownik@serwer.polska.pl:~$ oznacza to, że jesteśmy już zalogowani na zdalnym serwerze i możemy wykonywać polecenia dokładnie tak, jak robimy to lokalnie w konsoli.
SCP - Bezpieczne kopiowanie
Integralną częścią pakietu SSH jest program SCP (secure copy), służący do bezpiecznego kopiowania plików na zdalny komputer z działającym serwerem SSH oraz ze zdalnego komputera na komputer lokalny. Duet SSH+SCP jest doskonałym zamiennikiem serwera FTP, który jak wiadomo nie grzeszy bezpieczeństwem. W najprostszej postaci, skopiowanie pliku z użyciem SCP sprowadza się do wydania komendy:
scp plik.txt użytkownik@serwer.polska.pl:
Polecenie to skopiuje lokalny plik plik.txt na zdalny serwer o nazwie serwer do katalogu domowego użytkownika user
Po ':' możemy podać oczywiście dowolną, inną ścieżkę na zdalnym serwerze, do której mamy dostęp w trybie zapisu, np. /tmp czy /home/public, etc. Aby skopiować plik ze zdalnego serwera na lokalny komputer również użyjemy programu scp:
scp użytkownik@serwer.polska.pl:plik.txt
Skopiuje plik plik.txt znajdujący się w katalogu domowym użytkownika użytkownik na komputerze serwer do lokalnego katalogu, w którym aktualnie się znajdujemy.

Inne przydatne opcje SCP:
-r - kopiuje rekursywnie (z podkatalogami) podany katalog,
-P port - używa innego portu niż standardowy 22 (oczywiście używamy tej opcji w przypadku, gdy zdalny serwer SSH nasłuchuje na niestandardowym porcie)
SSH bez hasła - generujemy klucze
Wpisywanie hasła przy każdym połączeniu przez SSH lub próbie skopiowania pliku może być denerwujące. Z drugiej strony całkowity brak zabezpieczenia przed nieuprawnionym dostępem jest oczywistą dziurą w bezpieczeństwie i na to również nie możemy sobie pozwolić. Rozwiązaniem takiego problemu jest uwierzytelnianie za pomocą kluczy - publicznego i prywatnego.
Zestaw kluczy generujemy lokalnie poleceniem ssh-keygen. Poniżej przykładowy efekt działania komendy generującej klucz asymetryczny typu RSA lub DSA
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Przy pytaniu o hasło należy wcisnąć ENTER - utworzony zostanie klucz bezhasłowy. Po wykonaniu tego polecenia, wygenerowane zostały dwa klucze. Klucz prywatny został zapisany w pliku /home/user/.ssh/id_rsa i nie powinniśmy go udostępniać nikomu. Drugi klucz, publiczny, pojawił się w pliku /home/user/.ssh/id_rsa.pub i ten klucz będziemy mogli pokazać całemu światu. Na serwerze z którym będziemy nawiązywć połączenie powinniśmy go umieścić pod nazwą /home/user/.ssh/authorized_keys2 Zatem wykonujemy dodatkowo następujące polecenia
scp /home/user/.ssh/id_rsa.pub użytkownik@zdalny_serwer:~/ ssh user@zdalny_serwer
Następne polecenie wykonujemy już na zdalnej maszynie:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys2
Uwaga: aby również ze zdalnego serwera można było połączyć się z lokalnym komputerem bez hasła, należy wykonać analogiczą, odwrotną operację (wygenerować klucz publiczny i prywatny na serwerze zdalnym i skopiować publiczną część na komputer lokalny). Uwierzytelnianie za pomocą kluczy jest operacją jednostronną, tzn. klucz prywatny można zweryfikować kluczem publicznym, ale nie odwrotnie.