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.

wprowadź opis zdjęcia tutaj

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:

  1. Opcje wiersza poleceń
  2. Plik konfiguracyjny użytkownika ~/.ssh/config
  3. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow