Dydaktyka:
FeedbackTo jest stara wersja strony!
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 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.
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ę.
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
:
cel
klucz publiczny musi zostać dopisany do pliku ~/.ssh/authorized_keys
~/.ssh/id_ecdsa
, ~/.ssh/id_rsa
lub ~/.ssh/id_dsa
,-i
/ --identity
, np.: ssh -i moj_klucz użytkownik@cel
Do automatycznego kopiowania kluczy służy komenda ssh-copy-id użytkownik@cel
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 &
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:
Spróbuj połączyć X11 forwarding i ProxyJump:
ssh -Y -J infxxx@polluks.cs.put.poznan.pl root@lab-net-1
wireshark
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.
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
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.
Podanie opcji -D port
uruchamia SOCKS5 proxy na podanym porcie, np:
ssh -D 1080 infxxx@polluks.cs.put.poznan.pl
Przykłady użycia:
Program ''screen'' jest standardowym narzędziem do pracy na zdalnych serwerach.
Screen pozwala:
Zalety dla pracy zdalnej (zwykle przez SSH):
Wiele dystrybucji Linuksa włącza screen w zestaw podstawowych pakietów.
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 (polecenia) w programie GNU screen to kolejno:
Ctrl + a
,
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 ?
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
.
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 |
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:
hjkl
) na pierwszym znaku
Do wklejania tekstu służy C-a ]
(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
''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
.
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.
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
Po wydaniu komendy tmux set mouse
(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 :
C-b ]
).
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).