Uniksowe konta shellowe
Tzw. konto shellowe to konto w systemie pozwalające na dostęp do powłoki systemu. Większość internautów ma tylko konta pocztowe. Mogą wysyłać i odbierać pocztę ale nie mogą na serwerze uruchamiać programów. Konto shellowe (konto z dostępem do shella) umożliwia zdalną pracę na serwerze. Możemy pracować na komputerze podobniej jak byśmy przy nim siedzieli. Pierwotnie zdalny dostęp był oferowany przez telnet. Obecnie ze względu na brak szyfrowania a więc bezpieczeństwa bardzo rzadko można go spotkać. Został zastąpiony przez SSH. Protokół SSH występuje w dwóch wersjach starszej i mniej bezpiecznej 1 oraz nowszej i bezpieczniejszej 2. Większość serwerów obsługuje obydwie wersje ale powoli przechodzi się na dwójkę. Aby połączyć się przez SSH z serwerem potrzebny jest oczywiście klient SSH. Praktycznie każdy uniksowy system operacyjny (a więc m.in. Linux) zawiera konsolowego klienta SSH. Wystarczy w terminalu wpisać:
ssh nazwa_użytkownika@adres_serwera
Potem podajemy hasło i już jesteśmy na zdalnym systemie. Jeśli na systemie z którego się łączymy mamy taką samą nazwę użytkownika jak na zdalnym, wystarczy podać sam adres serwera. Dla Windows także istnieją konsolowe klienty SSH jednak największym powodzeniem cieszy się okienkowy
PuTTY (dostępny też na Linuksa). W okienku ustawień połaczenia podajemy adres serwera, następnie klikamy na Open, podajemy hasło i już możemy pracować. Obojętnie jak byśmy się nie łączymy, przy pierwszym połączeniu proszeni jesteśmy o zaakceptowanie klucza publicznego serwera. Jeśli potem dostaniemy informację o niezgodności kluczy, należy się upewnić, czy nie był on zmieniany przez administratora serwera. Jeśli nie był, będzie to oznaczało próbę podszycia się pod serwer i przejęcia naszej sesji.
Wymiana plików
Do wymiany plików między komputerami po protokole SSH służą dwa inne protokoły: SCP (wykorzystujący powłokę zdalnego systemu) i SFTP (działający podobnie do tradycyjnego FTP). Uniksowy klient SCP to po prostu program scp, działający analogicznie jak polecenie cp. Podajemy więc dwa parametry: plik źródłowy i plik docelowy. Jeśli np. chcemy wysłać na serwer plik file.txt wpiszemy:
scp file.txt nazwa_użytkownika@nazwa_serwera:plik.txt
Podobnie jak przy poleceniu ssh nazwę uzytkownika (i małpę) możemy opuścić jeśli logujemy się na konto o tej samej nazwie. Do nazwy pliku możemy dodać ścieżkę dokładnie wskazującą jego położenie. Nazwę pliku docelowego można opuścić jeśli ma być taka sama jak źródłowego. Ściąganie pliku wygląda analogicznie:
scp nazwa_serwera:dir/plik.txt .
W tym przykładzie nazwy użytkowników są takie same. Plik jest ściągany z podkatalogu dir. Jako plik lokalny podana jest kropka czyli plik będzie ściągnięty do katalogu lokalnego i otrzyma taką samą nazwę jak plik źródłowy. Do przesyłania plików po protokole SFTP służy program sftp (ja mógłby nazywać się inaczej :) ). Jego obsługa jest bardzo podobna do zwykłego polecenia ftp więc nie będę jej tu omawiać. Programy scp i sftp są też dostępne na Windows lecz tutaj tradycyjne królują rozwiązania okienkowe. Wśród nich liderem jest
WinSCP. Program ten obsługuje też SFTP. Jego obsługa jest bardzo prosta bo sprowadza się do przeciągania plików. Program może pracować w dwóch postaciach: z dwoma panelami jak w Total Commander albo jako pojedyncze okienko takie jak Mój kopmputer. Logowanie wygląda bardzo podobnie do tego z PuTTY bo WinSCP bazuje na kodzie właśnie tego programu.
Uwierzytelnianie kluczami
Jeśli ktoś często łączy się z serwerem i nie chce za każdym razem podawać hasła, może skorzystać z uwierzytelniania kluczami. Ogólnie działa to w ten sposób, że generujemy parę kluczy: publiczny i prywatny. Publiczny umieszczamy na serwerze a prywatny trzymamy na swoim komputerze. Klient SSH uwierzytelnia się kluczem prywatnym i jeśli serwer stwierdzi, że pasuje on do posiadanego klucza publicznego, użytkownik wpuszczany jest bez hasła.
W systemach uniksowych do generowania kluczy służy polecenie
ssh-keygen
. Pod Windows zwykle klucze tworzy się za pomocą programu PuTTY Key Generator (jest na stronie
PuTTY). Wybieramy rodzaj klucza, zwykle RSA2. Klikamy na Generate i poruszamy myszą na pustym polu w celu dostarczenia programowi przypadkowych danych. Gdy klucze zostaną wygenerowane, klikamy na Save private key aby zapisać klucz prywatny na dysku. Zostaniemy zapytani, czy na pewno chcemy zapisać klucz bez hasła. Otóż jako że klucz umożliwia logowanie bez hasła, może być chroniony hasłem na wypadek gdyby ktoś go zdobył. Co więc wybrać, zdecydować się na brak hasła i obawę, że ktoś kto przejmie klucz prywatny np. kradnąc nasz komputer uzyska dostęp do konta shellowego, czy też ochronę hasłem, która wymusi wpisywanie hasła tak samo jak przy zwykłym logowaniu? Jest jeszcze jedno wyjście: można ze strony PuTTY ściągnąć agenta, który będzie zapamiętywać hasło do klucza co zmniejszy ilość razy gdy trzeba wpisywać hasło. Wybór należy do użytkownika. Jeśli ktoś nie potrafi zapamiętać hasła i ma je zapisane gdzieś na dysku, to użycie klucza bez hasła zapewni mu wygodę i taki sam poziom bezpieczeństwa. Osobom którym zależy na bezpieczeństwie wybiorą ochronę klucza hasłem. Klucz prywatny można podać w konfiguracji PuTTY (sekcja Connection | SSH | Auth), podobnie jest w WinSCP. Zanim będziemy się mogli zalogować przy użyciu klucza, musimy jeszcze umieścić klucz publiczny na serwerze. Jego położenie zależy od serwera. Najpopularniejszy to OpenSSH. W katalogu domowym użytkownika, w katalogu .ssh należy zapisać klucz w pliku
authorized_keys
. Klucz dla OpenSSH jest w ramce na górze okienka PuTTY Key Generatora. Klucz w pliku powinien zajmować jedną linijkę. Co prawda widnije tam nazwa pliku zakończona dwójką (authorized_keys2) ale nie zauważyłem żadnych problemów z kluczami zapisywanymi w authorized_keys.
screen
screen jest bardzo fajnym programem spotykanym na systemach uniksowych. Wykorzystywany jest głównie do dwóch rzeczy: tworzenia wielu okien/konsol oraz zostawianiu aktywnych sesji po wylogowaniu się. Normalnie gdy siedzimy przy Linuksie mamy kilka konsol pomiędzy którymi możemy przełączać się za pomocą Alt+F1, Alt+F2 itd. Gdy łaczymy się przez SSH, na zdalnym komputerze mamy tylko jedną konsolę. Nie pozwala to wykonywać kilku rzeczy jednocześnie. Odpalenie kilku klientów SSH z lokalnych konsol albo kilku okienek PuTTY raczej nie jest dobrym wyjściem. Tutaj z pomocą przychodzi screen. Wydajemy więc polecenie screen. Jeśli pojawi się tekst powitalny naciskamy Enter. Jesteśmy teraz w pierwszym (i jedynym) okienku, przynajmniej taka nazwa jest używana w programie. Naciskamy teraz Ctrl+a, puszczamy i zaraz potem c. Zostanie utworzone drugie okno. Wydajmy teraz jakieś polecenie np. ls. Wyświetli się lista plików. Naciskamy Ctrl+a a potem n. ls zniknęło, jesteśmy w pierwszym oknie. Powtórne naciśnięcie Ctrl+a i n przeniesie nas znów do drugiego okna (gdzie zobaczymy wynik ls). A więc generalnie naciśnięcie i puszczenie Ctrl+a oznacza, że zaraz nastąpi komenda dla screena. Takimi komendami były właśnie c (nowe okno) i n (przejście do następnego). p to przejście do poprzedniego. d to odłączenie się od screena. Co to oznacza? To oznacza, że wracamy do tej podstawowej konsoli, w której wydaliśmy polecenie screen. Nie jesteśmy w screenie, ale on cały czas działa i programy, które w nim uruchomiliśmy także działają. Możemy teraz się wylogować (logout, exit) albo rozłączyć, a screen będzi nadal działać! Aby się o tym przekonać logujemy się ponownie na serwer i wydajemy polecenie
screen -r
. Powrócimy do screena, do okienka, które ostatnio używaliśmy. Tak więc screen pozwala pozostawić uruchomione programy na serwerze i się wylogować. Ponadto nie musimy się martwić, że nasza praca przepadnie gdy połączenie zostanie zerwane. Wystarczy wtedy zalogować się ponownie i wpisać screen -r. Czasami jednak może to nie zadziałać i wtedy trzeba wpisać
screen -rD
. Niektórzy pewnie jeszcze zapytają jak zamknąć otwarte okienko. Wystarczy wyjść z powłoki poleceniem
exit
. Ciekawą funkcją screena jest możliwość wyświetlania kilku obszarów (regions) jednocześnie, czyli poziomego podziału ekranu na kilka obszarów. Aby zrobić nowy obszar należy wcisnąć Ctrl+a Shift+s. Zostanie otwarty nowy pusty obszar a bieżący zostanie zmniejszony do połowy ekranu. Przełączamy się na nowy obszar za pomocą Ctrl+a Tab. Tworzymy w nim okienko za pomocą znanej komendy Ctrl+a c. Mamy teraz dwa obszary, każdy działa niezależnie, każdy może przechowywać wiele okienek. Zamknięcie bieżącego obszaru następuje za pomocą Ctrl+a Shift+x. Ctrl+a Shift+q zamyka wszystkie obszary oprócz bieżącego. Jeśli zamykany obszar miał jakieś okienka, zostaną one doczepione do innego obszaru. Oczywiście ekran (terminal) może być podzielony na więcej niż dwie części, wystarczy wcisnąć jeszcze raz Ctrl+a Shift+s. screen ma jeszcze wiele fajnych funkcji, można o nich poczytać w pomocy (man screen).
Uwaga. Pojawiajace się w tekście pojęcie serwera nie oznacza jakieś specjalnej maszyny. Każdy może postawić sobie serwer SSH na swoim komputerze.