Sieć
Table of Contents
SSH
Konfiguracja ssh
Na działanie klienta ssh możemy wpływać podając opcję z linii poleceń lub uzupełniając zawartość pliku konfiguracyjnego ~/.ssh/config1.
Pełna lista opcji jest dostępna w podręczniku systemowym ssh_config(5).
Poniższy wpis do pliku:
Host polon
HostName polon.fizyka.umk.pl
User gkowzan
Host *
TCPKeepAlive yes
ServerAliveInterval 100sprawi że wywołując polecenie ssh polon połączymy się do serwera polon.fizyka.umk.pl podając nazwę użytkownika gkowzan.
Wpis Host * ustala opcje stosowane do każdego połączenia, tutaj wysyłanie pakietów próbnych, aby sprawdzić czy połączenie nie uległo zerwaniu.
Polecenia zdalne
SSH używamy na każdych zajęciach, aby zalogować się i pracować na serwerach wydziałowych:
ssh login@hostgdzie host to tor, polon, ferm (z komputerów wydziałowych) albo ameryk (spoza wydziału).
Bardziej ogólnie składnia polecenia SSH to ssh [opcje] login@host [polecenie].
Jeśli nie podamy polecenia, to uruchamiana jest sesja interaktywna logowania.
Jeśli podamy polecenie, to jest ono wywoływanie na serwerze zdalnym za pośrednictwem powłoki domyślnej uruchomionej w trybie nie-interaktywnym.
W przypadku basha oznacza to, że zawartość plików uruchomieniowych (~/.bashrc, ~/.profile, …) nie jest wczytywana2.
ssh gkowzan@ameryk.fizyka.umk.pl "ls -l /usr/bin|head -n5"razem 579620
-rwxr-xr-x 1 root root 54960 2023-04-01 [
lrwxrwxrwx 1 root root 8 08-26 11:08 2to3 -> 2to3-3.6
-rwxr-xr-x 1 root root 106 08-26 11:08 2to3-3.6
-rwxr-xr-x 1 root root 12176 12-10 10:49 abrt-action-analyze-oopsPamiętajmy też o zasadach cytowania, jeśli chcemy odwołać się do zmiennych środowiskowych:
ssh gkowzan@ameryk.fizyka.umk.pl "echo $HOME" # $HOME interpretowane lokalnie
ssh gkowzan@ameryk.fizyka.umk.pl 'echo $HOME' # $HOME interpretowane zdalnie/Users/gkowzan
/home/gkowzanPrzekierowania
Zwróćmy uwagę, że cytowanie komendy ma zasadnicze znaczenie, gdy używamy przekierowań:
ssh gkowzan@ameryk.fizyka.umk.pl "echo pomidor > nowy_plik"
ssh gkowzan@ameryk.fizyka.umk.pl "echo pomidor" > nowy_plikPierwsza linijka utworzy plik na serwerze zdalnym, druga linijka na komputerze lokalnym.
Naturalnie, zamiast przekierowania do pliku możemy użyć przekierowania wyjścia komendy do wejścia innej komendy. W szczególności, możemy przekierować wyjście komendy zdalnej do wejścia lokalnej komendy:
mkdir zdalny_config
cd zdalny_config
ssh gkowzan@ameryk.fizyka.umk.pl "tar zc .config" | tar zx
ls -latotal 0
drwxr-xr-x 3 gkowzan staff 96 13 sty 22:35 .
drwxr-xr-x@ 156 gkowzan staff 4992 13 sty 22:35 ..
drwx------ 10 gkowzan staff 320 15 gru 12:28 .configKatalog .config jest archiwizowany i kompresowany zdalnie. Otrzymany ciąg bajtów jest przekierowany do lokalnego procesu, który dekompresuje i odtwarza lokalnie strukturę katalogów.
Tunelowanie
Podobną funkcjonalnością jest tunelowanie portów:
Połączenia na port LPORT lokalnego komputera zostaną przekierowane do komputera remotehost, portu RPORT za pośrednictwem serwera SSH.
ssh -L 9876:fizyka.umk.pl:80 polonSSH_PORT to domyślnie 22.
Używając opcji -R możemy ustawić odwrotne przekierowanie.
Logowanie bez hasła
Jak działa SSH? Po połączeniu klient sprawdza czy serwer jest tym za kogo się podaje. Jeśli pierwszy raz łączymy się do serwera, to dostajemy pytanie czy klucz publiczny podany przez serwer zgadza się z naszymi oczekiwania. Klucz jest zapisywany i przy każdym kolejnym połączeniu klient sprawdza czy ten sam serwer podaje ten sam klucz. Klient używa klucza publicznego serwera i klucza specjalnego dla tej sesji (współdzielonego przez klienta oraz serwer), aby zaszyfrować komunikację. Tak zaszyfrowane dane mogą być odszyfrowane tylko przez posiadacza klucza prywatnego serwera, czyli przez serwer. Potem serwer sprawdza czy jesteśmy użytkownikiem, za którego się podajemy. Może to zweryfikować pytając o hasło - tak jak to robiliśmy do tej pory - lub używając pary kluczy publiczny-prywatny, analogicznie do klucza serwera powyżej. Tylko my powinniśmy posiadać swój osobisty klucz prywatny. Część publiczną możemy przesyłać na serwery, aby potem móc zalogować się bez hasła.
Tworzymy klucz w domyślnym standardzie3 wywołując polecenie bez żadnego argumentu:
ssh-keygenTworzymy klucz testowy, który potem usuniemy.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/gkowzan/.ssh/id_ed25519): /Users/gkowzan/.ssh/id_ed25519_TEST
Enter passphrase for "/Users/gkowzan/.ssh/id_ed25519_TEST" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/gkowzan/.ssh/id_ed25519_TEST
Your public key has been saved in /Users/gkowzan/.ssh/id_ed25519_TEST.pub
The key fingerprint is:
SHA256:2no227KOjGJ6NhYNGixqiP+8Y0D923ukV2ESgYpQXa8 gkowzan@host-105.96.fizyka.umk.pl
The key's randomart image is:
+--[ED25519 256]--+
| ... ..... |
| . . ... |
|. o . . .. |
|o.o o . .. o |
|=+ o . E o . |
|=.o . .o . . |
|.. o .o.o . |
| O.oo.oB.o |
|.* ==o++=O. |
+----[SHA256]-----+Kopiujemy plik na serwer zdalny używając polecenia ssh-copy-id <host>.
Bez dodatkowych argumentów program loguje się na <host> i kopiuje wszystkie pliki użytkownika na serwer, zapisując je w pliku ~/.ssh/authorized_keys:
ssh-copy-id -i ~/.ssh/id_ed25519_TEST.pub polon/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/gkowzan/.ssh/id_ed25519_TEST.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -i /Users/gkowzan/.ssh/id_ed25519_TEST 'polon'"
and check to make sure that only the key(s) you wanted were added.i logujemy się na serwer zgodnie z sugestią:
ssh -i /Users/gkowzan/.ssh/id_ed25519_TEST 'polon'Możemy sprawdzić, że ~/.ssh/authorized_keys zawiera na końcu nowy wpis.
Jeśli chcemy uniemożliwić logowanie się określonym kluczem, to usuwamy jego wpis z pliku.
scp i rsync
netcat
netcat i jego współczesny wariant ncat to narzędzia diagnostyczne pozwalające nasłuchiwać i nawiązywać połączenia pod dowolnym portem.
Narzędzia
Narzędzia powszechnie używane do diagnostyki działania sieci i aplikacji sieciowych.
- ping, traceroute, mtr
- nslookup, dig
- ip, ifconfig, route
- netstat, ss
- wget, curl
- netcat, ncat
Zadania
ls /etc
Zapisz wynik polecenia ls /etc na fermie do lokalnego pliku ~/zawartosc-etc.txt, używając przekierowania wyjścia procesu ssh.
find
Znaleźć wszystkie pliki, których jesteś właścicielem w katalogu /tmp na serwerze ameryk lub ferm i zapisać listę tych plików do pliku lokalne ~/moje-pliki-tmp.txt.
grep
Utwórz w bieżącym katalogu plik lorem.txt o zawartości:
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Maecenas in lacus libero
Maecenas risus justo, ornare a mauris sed, imperdiet pellentesque diam
Nulla mollis faucibus nunc, non condimentum enim condimentum nec
Aliquam egestas justo blandit facilisis auctor
Curabitur elementum nunc ornare ultricies porttitor
Donec bibendum orci eget ullamcorper pretium
Aliquam erat volutpat
Vestibulum commodo orci hendrerit, efficitur turpis ut, malesuada lorem
Nulla eleifend quam nec blandit lobortis
Proin viverra tincidunt erat in mollis
Cras ut metus sit amet magna ullamcorper condimentum at vel felis
Fusce vehicula eros in dapibus placerat
In hac habitasse platea dictumst
Donec efficitur odio vel nisi elementum, ac hendrerit eros viverra
Nam vitae vehicula velit, a vulputate sapien
Nam fringilla ligula a arcu pellentesque, sit amet condimentum neque faucibus.Użyj ssh aby przekazać zawartość pliku jako wejście polecenia grep na serwerze ferm (lub ameryk), które wyszukuje wszystkie wystąpienia ciągu znaków “amet”. Polecenie powinno zwrócić wynik:
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Cras ut metus sit amet magna ullamcorper condimentum at vel felis
Nam fringilla ligula a arcu pellentesque, sit amet condimentum neque faucibus.scp
Użyj scp do skopiowania pliku ~/.bashrc do pliku ameryk_bashrc w bieżącym katalogu lokalnym.
klucze
Użyj polecenia ssh-keygen aby utworzyć klucz typu RSA w położeniu ~/.ssh/id_rsa_TEST. Przekopiuj klucz na serwer wydziałowy, zaloguj się przy jego użyciu. Następnie usuń ten klucz z serwera wydziałowego (~/.ssh/authorized_keys) oraz z komputera lokalnego.
konfiguracja
Dodaj serwery wydziałowe ameryk oraz ferm do swojego pliku konfiguracyjnego tak, abyś mógł logować się bez podania nazwy użytkownika oraz pełnego adresu.
kopiowane
Użyj polecenia scp aby skopiować katalog /usr/share/man/pl jako katalog polish_man w bieżącym katalogu.
Użyj polecenia rsync (z opcjami -avz) aby skopiować ten sam katalog (/usr/share/man/pl) jako katalog polish_man_rsync w bieżącym katalogu.
Który program szybciej wykonał kopiowanie?
Który program szybciej zakończy działanie jeśli wywołasz go ponownie, tzn. próbując wykonać to samo kopiowanie?
netcat
Użyj polecenia ncat aby przesłać wiadomość koledze lub koleżance obok.
- Zalogujcie się obydwoje na ten sam serwer wydziałowy i nasłuchujcie/wysyłajcie wiadomości na adres lokalny (localhost).
- Sprawdźcie adresy IP komputerów lokalnych w sali i nawiążcie połączenie między komputerami.
ping
Wywołaj polecenie ping tak, aby program zakończył działanie po otrzymaniu jednej odpowiedzi od komputera zdalnego.
mtr
Sprawdź działanie polecenia mtr na dowolnym zdalnym hoście, np. mtr google.com. Porównaj z funkcjonalnością poleceń ping oraz traceroute.
netstat
Użyj polecenia netstat do wyświetlenia wszystkich gniazd TCP na serwerze wydziałowym.
Przypisy
-
Klient ssh bierze również pod uwagę zawartość pliku
/etc/ssh/ssh_config, który kontroluje administrator systemu. ↩︎ -
https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/ ↩︎
-
Obecnie jest to standard Ed25519, lecz z biegiem czasu może on ulec zmianie, jeśli okaże się zbyt słaby. ↩︎