Taken from: http://jakilinux.org/aplikacje/sztuczki-z-ssh/

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/użytkownik/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/użytkownik/.ssh/id_rsa. Your public key has been saved in /home/użytkownik/.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/użytkownik/.ssh/id_rsa i nie powinniśmy go udostępniać nikomu. Drugi klucz, publiczny, pojawił się w pliku /home/użytkownik/.ssh/id_rsa.pub i ten klucz będziemy mogli pokazać całemu światu.

Abyśmy z naszego lokalnego komputera mogli logować się bez hasła (a jedynie z użyciem klucza) na zdalny serwer musimy już tylko dodać wpis o naszym kluczu publicznym do pliku authorized_keys znajdującego się w katalogu ~/.ssh na serwerze zdalnym. Aby to zrobić, wystarczy wykonać poniższe polecenia:

Rys 1. Logowanie przez SSH bez hasła

scp /home/użytkownik/.ssh/id_rsa.pub użytkownik@zdalny_serwer:~/ ssh użytkownik@zdalny_serwer cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Trzecie z tych poleceń wykonujemy już oczywiście na zdalnym serwerze. Po tej operacji wszelkie akcje wykonywane na zdalnym serwerze za pośrednictwem SSH nie będą wymagały uwierzytelniania z użyciem hasła, co na pewno znacznie ułatwi nam pracę.

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.

X11 forwarding - uruchamiamy zdalnie aplikacje graficzne

Do nieznanych często funkcji SSH należy przekazywanie w sieci sesji protokołu X, dzięki czemu uruchomić możemy praktycznie każdy program graficzny na zdalnym komputerze. Wystarczy połączyć się ze zdalnym komputerem z opcją -X:

ssh -X user@serwer,

a każde polecenie wymagające sesji X będzie korzystać z tej znajdującej się na lokalnym komputerze, z którego uruchomiliśmy połączenie. Możemy na stałe włączyć opcję X11 Forwarding, edytując plik /etc/ssh/ssh_config (opcja ForwardX11 yes). Aby opcja ta zadziałała, przekazywanie X11 musi być włączone również po stronie serwera (plik /etc/ssh/sshd_config). Domyślna wartość różni się w zależności od dystrybucji Linuksa.

Oczywiście, możemy również uruchomić program za pomocą jednego polecenia, podając je pomiędzy dwoma apostrofami, np:

ssh -X user@serwer 'psi'.

W zależności od lokalnej konfiguracji serwera X, może okazać się niezbędna autoryzacja zewnętrznych połączeń, przy pomocy komendy xhost. Przykładowo, polecenie xhost + zaakceptuje chwilowo wszelkie zewnętrzne aplikacje. Jeśli planujemy korzystać z tej opcji na stałe, zalecana jest naturalnie bardziej bezpieczna konfiguracja serwera X.

Oczywiście szybkość działania aplikacji graficznych odpalanych przez SSH bardzo zależy od przepustowości naszego oraz zdalnego połączenia internetowego. Przy łączu typu DSL bez problemu możemy uruchamiać nawet dość wymagające aplikacje, jak Skype czy Thunderbird. SSHFS - Montujemy zdalny katalog

Praca na zdalnym serwerze za pomocą SSH może być nieco uciążliwa, zwłaszcza jeśli często musimy kopiować różne pliki w obu kierunkach. Wykorzystanie protokołu fish:// z Midnight Commandera czy Konquerora jest połowicznym rozwiązaniem - fish bywa zawodny, a także jest zdecydowanie wolniejszy niż dostęp przez czyste SSH. Idealnym rozwiązaniem byłaby możliwość montowania zdalnych zasobów dostępnych przez SSH. Od pewnego czasu możliwość taka istnieje dzięki kombinacji sshfs oraz fuse.

Fuse to moduł do jądra Linux (od niedawna znajduje się on już w podstawowej wersji jądra 2.6) pozwalający na montowanie systemów plików przez użytkownika nie posiadającego praw roota. Sshfs to program tworzony przez autora fuse, umożliwiający montowanie zdalnych zasobów poprzez SSH. Filozofia jest bardzo prosta - zasób SSH montowany jest w lokalnym katalogu. Od momentu zamontowania możemy wykonywać na nim prawie wszystkie operacje, dokładnie tak jakby był to katalog dostępny lokalnie.

Instalacja fuse i sshfs w Ubuntu sprowadza się do wydania komendy (jako root):

  1. apt-get install sshfs fuse.

Następnie należy dodać swojego użytkownika do grupy fuse (np. komendą usermod -G fuse użytkownik lub edytując plik /etc/group). Należy jeszcze załadować moduł fuse:

  1. modprobe fuse

Po przelogowaniu w konsoli możemy już spróbować zamontować zdalny katalog z użyciem sshfs:

mkdir ~/zdalny_serwer sshfs użytkownik@zdalny_serwer:/tmp ~/zdalny_serwer .

Powyższa komenda spowoduje zamontowanie katalogu /tmp na zdalnym serwerze w katalogu ~/zdalny_serwer. Skopiowanie jakiegoś pliku do tego katalogu spowoduje przezroczysty transfer tego pliku do katalogu domowego użytkownika na zdalnym serwerze. Podobny efekt będą miały inne operacje, jak tworzenie/usuwanie/edycja plików, nadawanie praw, etc.

Po zakończeniu pracy możemy odmontować katalog poleceniem:

fusermount -u ~/zdalny_serwer.

Nic nie stoi na przeszkodzie, żeby dodać wpis o montowaniu przez sshfs do pliku /etc/fstab w celu automatycznego montowania podczas startu systemu.

sshfs#użytkownik@zdalny_serwer:/tmp /home/użytkownik/zdalny_serwer/ fuse defaults 0 0

Przedtem wypada również dodać do pliku /etc/modules wpis dotyczący modułu fuse. W innym wypadku katalog zdalny nie zamontuje się. Podsumowanie

Jak widać, SSH to potężne narzędzie do pracy zdalnej, dzięki któremu wykonamy praktycznie każdą operację na zdalnym systemie uniksowym. Warto poznać i korzystać w praktyce z dodatkowych możliwości SSH. Dzięki nim praca zdalna może być jeszcze bardziej wydajna i przyjemna