Table of Contents
Poniższe materiały są formą quickstart guide - skrótowego tutoriala / instrukcji jak korzystać z narzędzi. Zachęcam do przejrzenia bogatszych w treści i wyjaśnienia źródeł.
SSH
ssh użytkownik@cel
Najpopularniejszym serwerem i klientem ssh w tej chwili jest OpenSSH. Na urządzeniach z ograniczonymi zasobami sprzętowymi spotykany jest też dropbear.
Popularnym klientem ssh dla Windows jest też PuTTY.
Od Windows 10 i Windows Serwer 2019 w skład systemu wchodzi OpenSSH.
know_hosts
Każdy serwer SSH posiada własną parę kluczy asymetrycznych.
Klient łącząc się do serwera sprawdza czy klucze publiczne serwera zgadzają się z kluczami zapamiętanymi w plikach /etc/ssh/ssh_known_hosts i ~/.ssh/known_hosts.
Jeśli nie ma klucza powiązanego z hostem, użytkownik jest pytany czy klucz którym przedstawia się serwer jest w porządku a następnie dodaje klucz do pliku ~/.ssh/known_hosts.
Jeśli klucza się nie zgadza, ssh wyświetla komunikat ostrzegawczy i przerywa pracę.
SSH i klucze użytkownika
Klient ssh może uwierzytelniać się przy pomocy kluczy asymetrycznych.
Taka forma uwierzytelniania jest powszechna do tego stopnia, że częściej spotyka się konfiguracje które dopuszczają logowanie tylko po kluczy niż te które dopuszczają logowanie tylko po haśle.
Używanie kluczy ssh jest też typowym uwierzytelnianiem przy korzystaniu z git+ssh (np. jest to preferowana metoda dla github.com).
Do generowania kluczy dla ssh (pary kluczy asymetrycznych - prywatnego i publicznego) można użyć komendy:
ssh-keygen -t typ -b rozmiar
Przykładowo:
ssh-keygen -t ecdsa -b 521
ssh-keygen -t rsa -b 4096
Klucz może nie mieć hasła, co pozwala na logowanie się bez podawania hasła (a tym samym umożliwia użycie ssh w skryptach wsadowych).
Klucz prywatny musi być odpowiednio chroniony!
Aby móc po kluczu zalogować się na zdalny komputer cel:
- na
celklucz publiczny musi zostać dopisany do pliku~/.ssh/authorized_keys - klient przedstawić się z użyciem klucza, tzn. klucz musi:
- być w lokalizacji
~/.ssh/id_ecdsa,~/.ssh/id_rsalub~/.ssh/id_dsa, - lub być podany w parametrze
-i/--identity, np.:
ssh -i moj_klucz użytkownik@cel
Do automatycznego kopiowania kluczy służy komenda ssh-copy-id użytkownik@cel
X11 forwarding
SSH pozwala też uruchamiać programy graficzne. Do tego potrzebuje przekazania parametru -Y (lub -X, różnice w man ssh).
Dla testów wykonaj:
ssh -Y infxxx@polluks.cs.put.poznan.plxterm &
ProxyJump
Jeśli do jakiegoś komputera nie można dostać się bezpośrednio (jak np. do lab-net-1), to można użyć opcji ProxyJump do połączenia się przez inny serwer. Przykłady:
ssh -J infxxx@polluks.cs.put.poznan.pl root@lab-net-1(działa od OpenSSH 7.3)ssh -o ProxyJump=infxxx@polluks.cs.put.poznan.pl root@lab-net-1
Spowoduje to:
- połączenie do infxxx@polluks.cs.put.poznan.pl
(i wyświetlenie pytania o hasło, jeśli jest wymagane) - połączenie do root@lab-net-1 z serwera polluks
(i wyświetlenie pytania o hasło, jeśli jest wymagane)
Spróbuj połączyć X11 forwarding i ProxyJump:
ssh -Y -J infxxx@polluks.cs.put.poznan.pl root@lab-net-1wireshark
Konfiguracja - plik ~/.ssh/config
Plik konfiguracyjny OpenSSH znajduje się w:
~/.ssh/config(dla Linuksa)%UserProfile%\.ssh\config(dla Windowsa)
Przykładowa zawartość:
Host polluks HostName polluks.cs.put.poznan.pl User infxxx IdentityFile ~/.ssh/moja-dziwna-nazwa-klucza Host lab-net-1 HostName lab-net-1 User root ProxyJump polluks Host github.com HostName github.com IdentityFile ~/.ssh/id_ecdsa User git
Taka zawartość pozwala wykonując ssh polluks łączyć się jako użytkownik infxxx z użyciem klucza ~/.ssh/moja-dziwna-nazwa-klucza na adres polluks.cs.put.poznan.pl,
a wykonując ssh -Y lab-net-1 łączyć się z lab-net-1 za pośrednictwem polluksa.
Port forwarding
Przełącznik -L portPoStronieKlienta:cel:docelowyPort dodany do komendy ssh pozwala łącząc się na adres tego komputera, na port portPoStronieKlienta, wykonać połączenie do cel na port docelowyPort ze zdalnego hosta.
Dla testów wykonaj:
ssh -L 8080:lindev.cs.put.poznan.pl:80 infxxx@polluks.cs.put.poznan.pl- Wejdź w przeglądarce na strony:
W drugą stronę działa przełącznik -R - pozwala przez połączenie ze strony hosta podany port połączyć się od klienta na podany adres i port.
SOCKS proxy
Podanie opcji -D port uruchamia SOCKS5 proxy na podanym porcie, np:
ssh -D 1080 infxxx@polluks.cs.put.poznan.pl
Przykłady użycia:
GNU screen
Program ''screen'' jest standardowym narzędziem do pracy na zdalnych serwerach.
Screen pozwala:
- uruchomić i przełączać się między powłokami (np. bash),
- odłączyć się z programu i np. wylogować się z maszyny,
- podłączyć się z powrotem do otwartych powłok.
Zalety dla pracy zdalnej (zwykle przez SSH):
- jeśli połączenie SSH zostanie przerwane, stan powłoki nie jest tracony,
- można uruchomić zdalnie długotrwałe zadanie, wyłączyć swój komputer, a później wrócić do konsoli w której wykonywało się zadanie,
- można łatwo uruchomić wiele powłok.
Wiele dystrybucji Linuksa włącza screen w zestaw podstawowych pakietów.
~/.screenrc
Przykładowa sensowna startowa konfiguracja (do umieszczenia w ~/.screenrc)
- ".screenrc"
hardstatus alwayslastline hardstatus string '%{= kG}%-Lw%{= kW}%50> %n*%f %t%{= kG}%+Lw%< %{= kG}%-=%m/%d/%y | %C:%s %A | %1`%{-}' startup_message off vbell off defscrollback 5000 screen -t 0 screen -t 1 screen -t 2 select 0
Skróty klawiszowe
Skróty klawiszowe (polecenia) w programie GNU screen to kolejno:
- naciśnięcie
Ctrl + a, - naciśnięcie odpowiedniego klawisza.
Przykładowo: do stworzenia nowego okna należy nacisnąć Ctrl, nacisnąć a, puścić a, puścić Ctrl, nacisnąć c, puścić c.
W zapisie skrótów klawiszowych zwykle stosuje się uproszczone notacje , np. zamiast Ctrl + klawisz stosuje się notację C-klawisz (lub ^klawisz), np. Ctrl + a zapisuje się jako C-a (lub ^a).
Naciśnięcie konkretnego klawisza i zwolnienie go, np. napierw C-a potem c zapisuje się ze spacją, tzn. C-a c.
Zapis M-klawisz, choć formalnie oznacza Meta + klawisz, zwykle jest oznacza Alt + klawisz.
https://en.wikipedia.org/wiki/Keyboard_shortcut#Notation
Żeby przekazać do aplikacji wewnątrz terminalna skrót klawiszowy Ctrl + a należy wykonać C-a a
Pomoc to skrót klawiszowy C-a ?
Start / odłączanie / dołączanie
Uruchomienie programu screen to po prostu komenda screen.
Odłączenie się od programu screen to kombinacja klawiszy C-a d (d od detach).
Ponowne podłączenie to wykonanie np. komendy screen -rx.
"Okna"
| Tworzenie nowego okna: | C-a c (create) |
| Przejście do nastepnego okna: | C-a n (next) |
| Przejście do poprzedniego okna: | C-a p (previous) |
| Przejście do okna nr 5: | C-a 5 |
| Zmiana nazwy okna: | C-a A |
Przewijanie wyników
Aby przewijać historię tego okna, należy wejść do trybu kopiowania skrótem C-a [
Przewijanie klawiszami strzałek, PageUp i PageDown.
Wyjście z trybu kopiowania to dowolny niedozwolony znak, np. Esc, C-c.
W trybie kopiowania można (jak nazwa wskazuje) skopiować tekst:
- umieść kursor (strzałki lub
hjkl) na pierwszym znaku - naciśnij spację (lub enter)
- umieść kursor na ostatnim znaku
- naciśnij enter
Do wklejania tekstu służy C-a ]
Split
(Da się, ale lepiej użyć tmuxa.)
Podziel poziomo: C-A S
Podziel pionowo: C-A |
Przeskocz do następnego okna: C-A Tab
Zamknij podział: C-A Q
Losowe linki
tmux
''tmux'', podobnie jak screen, pozwala uruchomić wiele powłok, odłączać się od nich i ponownie się przyłączać.
tmux jest bardziej rozbudowany niż screen, jedną z jego "wizytówek" jest dzielenie ekranu na wiele obszarów.
Domyślnie przy skrótach zamiast Ctrl + a używa Ctrl + b.
Podstawy
Uruchomienie: tmux
Odłączenie: C-b d
Ponowne podłączenie: tmux attach
Pomoc: C-b ?
Zarządzanie oknami jak w programie screen (C-b c tworzy, C-b p, C-b n C-b [0-9] przechodzi do innych).
Przewijanie wyników jak w screen: C-b [ wchodzi w tryb kopiowania.
Tryb kopiowania w tmux domyślnie używa skrótów z emacsa. Komendą tmux set-window-option -g mode-keys vi lub wpisem set-window-option -g mode-keys vi w ~/.tmux.conf przestawia się go w tryb działający podobnie jak dla programu screen.
Dzielenie ekranu
tmux pozwala podzielić każde okno na tafle (ang. panes).
Dzielenie pionowe: C-b %
Dzielenie poziome: C-b "
Nawigacja po taflach: C-b + strzałki
Zmiana rozmiaru tafli: C-b + C-strzałki
Maksymalizowanie/przywracanie tafli (zoom): C-b z
Integracja z myszą
Po wydaniu komendy tmux set mouse on (wewnątrz tmuxa) lub wpisaniu do pliku ~/.tmux.conf linii set-option -g mouse on program tmux integruje się z myszą.
Oznacza to, że można :
- przełączać między oknami klikając na nazwie okna,
- wybierać taflę klikając na niej,
- zmieniać rozmiar tafli chwytając linię między taflami,
- przewijać historię rolką,
- kopiować tekst zaznaczając go myszą (wkleja się standardowo przez
C-b ]), - wywoływać menu kontekstowe tmuxa trzymając prawy przycisk.
Uwaga: zaznaczony tekst nie trafia do schowka systemowego.
Wciśnięcie Shift przy zaznaczaniu tekstu / klikaniu myszą wyłącza obsługę myszy przez tmuxa (tzn. można tekst normalnie skopiować do schowka systemowego).