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 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:
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)
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
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
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.