Poniższe materiały są formą //[[https://en.wikipedia.org/wiki/Quickstart_guide|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 [[https://www.openssh.com/|OpenSSH]]. Na urządzeniach z ograniczonymi zasobami sprzętowymi spotykany jest też [[https://matt.ucc.asn.au/dropbear/dropbear.html|dropbear]].\\ Popularnym klientem ssh dla Windows jest też [[https://www.chiark.greenend.org.uk/~sgtatham/putty/|PuTTY]].\\ Od Windows 10 i Windows Serwer 2019 w skład systemu wchodzi [[https://docs.microsoft.com/pl-pl/windows-server/administration/openssh/openssh_overview|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 [[https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh|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 ''cel'' klucz 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_rsa'' lub ''~/.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.pl'' * ''xterm &'' ==== 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-1'' - ''wireshark'' ==== 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: * http://lindev.cs.put.poznan.pl/ * http://localhost:8080/ 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 [[https://en.wikipedia.org/wiki/SOCKS|SOCKS5 proxy]] na podanym porcie, np:\\ ''ssh -D 1080 infxxx@polluks.cs.put.poznan.pl'' Przykłady użycia: - Windows: https://support.microsoft.com/en-ph/help/4551930/using-proxy-servers-together-with-internet-explorer - Firefox: https://www.howtogeek.com/293213/how-to-configure-a-proxy-server-in-firefox/ - Chromium: https://www.chromium.org/developers/design-documents/network-stack/socks-proxy ====== GNU screen ====== Program [[https://www.gnu.org/software/screen/|''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'') 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 ==== * https://www.gnu.org/software/screen/manual/html_node/index.html * https://www.perl.com/article/153/2015/2/16/Get-to-grips-with-GNU-Screen/ ====== tmux ====== [[https://github.com/tmux/tmux/wiki|''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). ==== Losowe linki ==== * https://github.com/tmux/tmux/wiki/Getting-Started * https://tmuxcheatsheet.com/