Secure Shell Samouczek
Rozpoczęcie pracy z Secure Shell
Szukaj…
Uwagi
SSH (Secure Shell) to protokół kryptograficzny do komunikacji punkt-punkt w niezabezpieczonej sieci (Internet). Zastępuje on stare protokoły używane w dawnych czasach ( rlogin , rsh , telnet ).
Jest powszechnie używany do łączenia się ze zdalnymi serwerami, maszynami wirtualnymi lub kontenerami w centrum danych lub w prywatnej chmurze (silnik obliczeniowy Google, AWS, ...). Ale jest również powszechnie używany w połączeniu z git do bezpiecznego i łatwego uzyskiwania dostępu do repozytorium i aktualizowania go przy użyciu kluczy publicznych zamiast haseł.
Powinien także wymieniać wszelkie duże tematy w ssh i zawierać linki do powiązanych tematów. Ponieważ Dokumentacja dla ssh jest nowa, może być konieczne utworzenie początkowych wersji tych pokrewnych tematów. DO ZROBIENIA
Wersje
| Wersja | Informacje o wydaniu | Data wydania |
|---|---|---|
| OpenSSH 7.3p1 | Ostatnia wersja | 01.08.2016 |
| OpenSSH 7.2p2 | 2016-03-09 | |
| OpenSSH 7.1p2 | 14.01.2016 | |
| OpenSSH 7.1 | 21.08.2015 | |
| OpenSSH 7.0 | 08.11.2015 | |
| OpenSSH 6.9 | 01.07.2015 | |
| OpenSSH 6.8 | 18.03.2015 |
Instalacja lub konfiguracja
Darmowa wersja implementacji protokołu SSH, OpenSSH jest dostępna we wszystkich dystrybucjach Linuksa. Składa się z pakietów serwera i klienta.
Instalacja
W systemie Linux opartym na Debianie możesz zainstalować openssh przy użyciu
# apt-get install openssh-server openssh-client
Na RHEL / CentOS musisz użyć yum :
# yum install openssh-server openssh-clients
Obecna Fedora używa dnf zamiast yum .
W Arch Linux użyj pacman:
# pacman -S openssh
W OSX openssh powinien być już zainstalowany.
Jeśli chcesz użyć nowszej wersji, musisz zainstalować openssh z brew:
# brew install openssh --with-brewed-openssl --with-keychain-support
Instrukcje TODO dla systemu Windows
Ustawiać
Klient openssh nie wymaga żadnej specjalnej konfiguracji i jest gotowy do użycia zaraz po instalacji. Możesz wypróbować działającego ssh remote , gdzie remote to zdalny host z uruchomionym serwerem ssh .
Serwer openssh jest zwykle uruchamiany po instalacji i domyślnej instalacji. Jeśli nie, możesz go uruchomić w systemd opartych na systemie
W systemie Linux opartym na Debianie z systememd:
# systemctl start ssh
W systemach RHEL / CentOS / Fedora i Arch Linux:
# systemctl start sshd
Lub w systemach upstart za pomocą
# service sshd start
Konfiguracja
openssh ma pliki konfiguracyjne w /etc/ssh/ . Klient odczytuje również konfigurację klienta w ~/.ssh/config . Serwer używa pliku sshd_config , który zawiera większość wartości domyślnych i zawiera proste pary klucz-wartość. Przykład:
Protocol 2
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
Tworzenie klucza SSH
Możesz stworzyć swój klucz ssh za pomocą ssh-keygen, jest to program, który jest częścią instalacji ssh. Aby to zrobić, po prostu uruchom go i postępuj zgodnie z instrukcjami na ekranie.
Oto przykład:
$ ssh-keygen
Generating public/private rsa key pair.
Domyślny katalog, w którym zostanie zapisana para kluczy ssh, znajduje się w folderze .ssh w katalogu domowym (możesz to zmienić, podając prawidłową ścieżkę), a domyślną nazwą pary kluczy jest id_rsa dla klucza prywatnego i id_rsa.pub dla klucz publiczny:
Enter file in which to save the key (/home/nasreddine/.ssh/id_rsa): /home/my_folder/my_ssh_key
Możesz chronić swój klucz SSH przed nieautoryzowanym użyciem, wprowadzając hasło. Jest to opcjonalne, ale zaleca się użycie hasła. Pamiętaj, że podobnie jak w przypadku każdego innego programu poleceń, podczas wprowadzania hasła nie będzie on pokazywał niczego na ekranie, ale jest rejestrowany:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Po wprowadzeniu hasła ssh-keygen wygeneruje klucz i zapisze go na wybranej ścieżce:
Your identification has been saved in /home/my_folder/my_ssh_key.
Your public key has been saved in /home/my_folder/my_ssh_key.pub.
Skończyliśmy. Teraz nasz klucz ssh jest gotowy do użycia.
Jak włączyć SSH do maszyny
Aby zalogować się do konta użytkownika na komputerze za pomocą SSH, możesz użyć polecenia ssh username@ip_address . Poprosi o hasło. Jeśli wpiszesz poprawne hasło, nastąpi połączenie z powłoką tego użytkownika na tym komputerze. W przeciwnym razie pojawi się monit o podanie hasła.
Na przykład
root@dev10:~# ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-31-generic x86_64)
Last login: Fri Jul 22 18:33:27 2016 from 10.11.50.10
root@dev2:~#
Jeśli chcesz użyć określonego klucza ssh do połączenia z komputerem, użyj ssh -i /path/to/ssh_secret_key username@host
Kiedy łączysz się z maszyną po raz pierwszy, poprosi Cię o sprawdzenie odcisku palca maszyny docelowej. Jest to mechanizm bezpieczeństwa pozwalający uniknąć ataku man-in-the-middle . Możesz zobaczyć odcisk palca komputera docelowego, wydając to polecenie na komputerze docelowym.
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Możesz wpisać „tak”, jeśli oba są takie same. Przejdzie do pytania o hasło.
Przykład:
root@dev10:~# ssh [email protected]
The authenticity of host '10.11.50.3 (10.11.50.3)' can't be established.
ECDSA key fingerprint is dd:a3:de:cd:5b:01:cd:0b:b6:bc:b3:09:c2:c8:1a:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.11.50.3' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Fri Jul 22 17:45:09 2016 from 10.11.1.71
root@dev2:~#
Dodanie klucza publicznego do listy autoryzowanych kluczy użytkownika serwera
W celu ssh na serwerze klucz publiczny twojej tożsamości musi zostać dodany do listy zaufanych kluczy. Najczęściej odbywa się to na użytkownika:
ssh-copy-id -i ~/.ssh/<identity>.pub <user>@<hostname>
Co można również zrobić ręcznie:
cat ~/.ssh/<identity>.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
Po wykonaniu tej czynności powinieneś być w stanie zalogować się bez konieczności podawania hasła użytkownika podczas przekazywania pliku tożsamości do wywołania ssh .
Łączenie ze skryptu za pomocą hasła
Kiedy naprawdę potrzebujesz skryptu połączenia ssh , echo passw0rd | ssh host hasła do komendy ssh nie działa ( echo passw0rd | ssh host ). Jest tak, ponieważ hasło nie jest odczytywane ze standardowego wejścia, ale bezpośrednio z TTY (teleprinter, teletypewriter, Teletype z powodów historycznych).
Ale istnieje narzędzie sshpass , które działa w ten sposób. Może odczytać hasło z parametru, pliku lub zmiennej środowiskowej. Pamiętaj jednak, że żadna z tych opcji nie spełnia wymagań bezpieczeństwa dotyczących haseł!
$ sshpass -p passw0rd ssh host
$ sshpass -f /secret/filename ssh host
$ SSHPASS=passw0rd sshpass -e ssh host
Opcje wiersza poleceń mogą być widoczne dla innych użytkowników w ps (podczas działania jest maskowane, ale nie w czasie uruchamiania i nie można na nim polegać):
... 23624 6216 pts/5 Ss Aug30 0:00 \_ /bin/bash
... 12812 1988 pts/5 S+ 08:50 0:00 | \_ sshpass -p passw0rd ssh host
... 45008 5796 pts/15 Ss+ 08:50 0:00 | \_ ssh host
Zauważ, że zmienne środowiskowe procesu są również dostępne dla innych procesów w systemie korzystających z /proc/PID/environ .
Wreszcie, przechowywanie hasła w pliku może wyglądać jak najlepszy możliwy pomysł, ale nadal używanie kluczy, jak opisano w innych przykładach, jest preferowanym sposobem używania ssh .
Plik konfiguracyjny
Pliki konfiguracyjne OpenSSH są używane do konfiguracji, którą należy stosować przy każdym uruchomieniu klienta ssh. Większość opcji wiersza poleceń można umieścić w plikach konfiguracyjnych.
OpenSSH używa konfiguracji z następujących źródeł w kolejności:
- Opcje wiersza poleceń
- Plik konfiguracyjny użytkownika
~/.ssh/config - Plik konfiguracji systemu
/etc/ssh/ssh_config
Opcje konfiguracji są wymienione kolejno w plikach konfiguracyjnych.
# This is a comment.
# Parameter can be specified like this, separated with white space.
StrictHostKeyChecking ask
# Or parameter key and value may be separated with white space and =.
ForwardX11 = yes
# The parameter value can be quoted if it contains white space.
IdentityFile "/file system/path with/white space"
Pełna lista możliwych parametrów konfiguracji jest dostępna tutaj .
Jedną z najbardziej przydatnych funkcji pliku konfiguracyjnego jest to, że można go podzielić na sekcje na podstawie nazwy hosta lub adresu. W ten sposób możesz mieć różne konfiguracje dla różnych hostów.
# Based on host name.
Host host1.domain.com
User user1
Host host2.domain.com
User user2
# Or wildcard matching name or ip.
Host *elastic-cloud.com 10.201.4.?
User user3
Agent SSH
Jeśli ustawiłeś długie hasło i nie chcesz wprowadzać go za każdym razem, gdy chcesz połączyć się z serwerem, możesz użyć SSH-Agent do przechowywania hasła, gdy jesteś zalogowany na swoim komputerze.
Uruchom ssh-agent w tle:
eval "$(ssh-agent -s)"
# Agent pid 59566
I dodaj swój klucz do ssh-agent, zostaniesz poproszony o podanie hasła:
ssh-add ~/.ssh/matrix.ac
# Enter passphrase for /home/osaka/.ssh/matrix.ac:
# Identity added: /home/osaka/.ssh/matrix.ac (/home/osaka/.ssh/matrix.ac)
Gotowy. Teraz połącz się z ssh [email protected] i nie powinieneś wprowadzać swojego hasła. Możesz to rozszerzyć za pomocą programów takich jak gnome-keyring / seahorse, pęku kluczy i innych menedżerów kluczy.
