Secure ShellAan de slag met Secure Shell


Opmerkingen

De SSH (Secure Shell) is een cryptografisch protocol voor point-to-point communicatie via het onveilige netwerk (internet). Het veroudert de oude protocollen die vroeger werden gebruikt ( rlogin , rsh , telnet ).

Het wordt vaak gebruikt om verbinding te maken met externe servers, virtuele machines of containers in het datacenter of in uw privé-cloud (Google Compute Engine, AWS, ...). Maar het wordt ook vaak gebruikt in combinatie met git voor het veilig en gemakkelijk openen en bijwerken van je repository met behulp van openbare sleutels in plaats van wachtwoorden.

Het moet ook alle grote onderwerpen binnen SSH vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de Documentatie voor ssh nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken. TE DOEN

versies

Versie Release-opmerkingen Publicatiedatum
OpenSSH 7.3p1 Laatste versie 2016/08/01
OpenSSH 7.2p2 2016/03/09
OpenSSH 7.1p2 2016/01/14
OpenSSH 7.1 2015/08/21
OpenSSH 7.0 2015/11/08
OpenSSH 6.9 2015/07/01
OpenSSH 6.8 2015/03/18

Uw openbare sleutel toevoegen aan de lijst met geautoriseerde sleutels van de servergebruiker

Om ssh in een server heeft de publieke sleutel van uw identiteit te worden toegevoegd aan de lijst met vertrouwde toetsen. Meestal gebeurt dit per gebruiker:

ssh-copy-id -i ~/.ssh/<identity>.pub <user>@<hostname>
 

Dat kan ook handmatig worden gedaan:

cat ~/.ssh/<identity>.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
 

Nadat u dat hebt gedaan, moet u zich kunnen aanmelden zonder het wachtwoord van de gebruiker te hoeven opgeven wanneer u het identiteitsbestand doorgeeft aan de ssh aanroep.

Config-bestand

OpenSSH-configuratiebestanden worden gebruikt voor configuratie die moet worden toegepast telkens wanneer de SSH-client wordt uitgevoerd. De meeste opdrachtregelopties zijn mogelijk om de configuratiebestanden in te voeren.

OpenSSH gebruikt de configuratie uit de volgende bronnen om:

  1. Opdrachtregelopties
  2. Configuratiebestand van de gebruiker ~/.ssh/config
  3. Systeembreed configuratiebestand /etc/ssh/ssh_config

Configuratie-opties worden één voor één vermeld in de configuratiebestanden.

# 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"
 

De volledige lijst met mogelijke configuratieparameters is hier beschikbaar.

Een van de handigste functies van het configuratiebestand is dat het kan worden onderverdeeld op basis van hostnaam of adres. Op deze manier kunt u verschillende configuraties hebben voor verschillende hosts.

# 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
 

Verbinden vanuit script met wachtwoord

Als je echt een ssh verbinding nodig hebt, werkt het wachtwoord niet in de ssh opdracht ( echo passw0rd | ssh host ). Dit komt omdat het wachtwoord niet van standaardinvoer wordt gelezen, maar rechtstreeks van TTY (teleprinter, teletypewriter, Teletype om historische redenen).

Maar er is een sshpass tool die dit probleem sshpass . Het kan het wachtwoord van parameter, bestand of omgevingsvariabele lezen. Maar houd er rekening mee dat geen van deze opties niet voldoet aan de beveiligingsvereisten voor wachtwoorden!

$ sshpass -p passw0rd ssh host
$ sshpass -f /secret/filename ssh host
$ SSHPASS=passw0rd sshpass -e ssh host
 

De opdrachtregelopties kunnen door andere gebruikers in ps worden gezien (tijdens runtime wordt deze gemaskeerd, maar niet tijdens de starttijd en u kunt er niet op vertrouwen):

... 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
 

Merk op dat omgevingsvariabelen van een proces ook toegankelijk zijn voor andere processen op het systeem met behulp van /proc/PID/environ bestand.

Ten slotte lijkt het opslaan van het wachtwoord in het bestand het best mogelijke idee, maar toch is het gebruik van sleutels zoals beschreven in de andere voorbeelden de voorkeur om ssh te gebruiken.

Uw SSH-sleutel maken

Je kunt je ssh-sleutel maken met ssh-keygen, het is een programma dat deel uitmaakt van de ssh-installatie. Om dit te doen, voer het gewoon uit en volg de instructies op het scherm.

Hier is een voorbeeld:

$ ssh-keygen
Generating public/private rsa key pair.
 

De standaard map waar je ssh sleutelpaar wordt opgeslagen is in de .ssh map in je home directory (u kunt dit veranderen door het opgeven van een geldig pad) en de standaardnaam voor het sleutelpaar is id_rsa voor de persoonlijke sleutel en id_rsa.pub voor de publieke sleutel:

Enter file in which to save the key (/home/nasreddine/.ssh/id_rsa): /home/my_folder/my_ssh_key
 

U kunt uw SSH-sleutel beschermen tegen onbevoegd gebruik door een wachtwoord in te voeren. Dit is optioneel, maar het wordt aanbevolen om een wachtwoordzin te gebruiken. Houd er rekening mee dat, net als bij elk ander opdrachtprogramma, er bij het invoeren van uw wachtwoordzin niets op het scherm wordt weergegeven, maar het wordt opgenomen:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
 

Zodra u uw wachtwoordzin invoert, genereert ssh-keygen een sleutel en slaat deze op het door u gekozen pad op:

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.
 

Werden gedaan. Nu is onze ssh-sleutel klaar voor gebruik.

voer hier de afbeeldingsbeschrijving in

Hoe SSH in een machine

Om in te loggen op een gebruikersaccount op machine met SSH kunt u de opdracht ssh username@ip_address . Er wordt om een wachtwoord gevraagd. Als u het juiste wachtwoord typt, wordt u verbonden met de shell van die gebruiker op die machine. Anders wordt het wachtwoord opnieuw gevraagd.

Bijvoorbeeld

root@dev10:~# ssh root@10.11.50.3
root@10.11.50.3'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:~# 
 

Als u een specifieke ssh-sleutel wilt gebruiken om verbinding te maken met een machine, gebruikt u ssh -i /path/to/ssh_secret_key username@host

Wanneer u voor het eerst verbinding maakt met een machine, wordt u gevraagd de vingerafdruk van de doelmachine te verifiëren. Dit is een beveiligingsmechanisme om een man-in-the-middle-aanval te voorkomen . U kunt de vingerafdruk van de doelmachine zien door deze opdracht op de doelmachine uit te voeren.

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
 

U kunt "ja" typen als beide hetzelfde zijn. Het gaat door naar de wachtwoordprompt.

Voorbeeld:

root@dev10:~# ssh root@10.11.50.3
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.
root@10.11.50.3's password: 

Last login: Fri Jul 22 17:45:09 2016 from 10.11.1.71
root@dev2:~# 
 

Installatie of instellingen

Gratis versie van SSH-protocolimplementatie, OpenSSH is beschikbaar in alle Linux-distributies. Het bestaat uit de server- en clientpakketten.

Installatie

Op Debian-gebaseerde Linux kunt u openssh installeren met

# apt-get install openssh-server openssh-client
 

Op RHEL / CentOS moet je yum :

# yum install openssh-server openssh-clients
 

Huidige Fedora gebruikt dnf plaats van yum .

Gebruik pacman op Arch Linux:

# pacman -S openssh
 

Op OSX moet de openssh al zijn geïnstalleerd.

Als u een recentere versie wilt gebruiken, moet u de openssh van brew installeren:

# brew install openssh --with-brewed-openssl --with-keychain-support
 

TODO instructies voor Windows

Opstelling

De openssh client heeft geen speciale installatie nodig en is direct na installatie gereed voor gebruik. Je kunt dat met ssh remote proberen, waarbij de remote de remote host is die ssh server draait.

De openssh server wordt meestal gestart na de installatie en standaardinstellingen worden toegepast. Zo niet, dan kun je hem starten op systemd gebaseerde systemen met behulp van

Op Debian-gebaseerde Linux met systemd:

# systemctl start ssh
 

Op RHEL / CentOS / Fedora en Arch Linux:

# systemctl start sshd
 

Of op upstart-systemen met

# service sshd start
 

Configuratie

De openssh configuratiebestanden onder /etc/ssh/ . De client leest ook de clientconfiguratie in ~/.ssh/config . De server gebruikt een bestand sshd_config , dat de meeste standaardwaarden bevat en eenvoudige sleutel / waarde-paren bevat. Voorbeeld:

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
 

SSH-Agent

Als u een lange wachtwoordzin hebt ingesteld en deze niet telkens wilt blijven invoeren wanneer u verbinding wilt maken met de server, kunt u SSH-Agent gebruiken om uw wachtwoordzin op te slaan terwijl u bent ingelogd op uw computer.

Start de ssh-agent op de achtergrond:

eval "$(ssh-agent -s)"
# Agent pid 59566
 

En voeg uw sleutel toe aan de ssh-agent, u wordt gevraagd uw wachtwoordzin in te voeren:

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)
 

Gedaan. ssh user@matrix.ac nu verbinding met ssh user@matrix.ac en u hoeft uw wachtwoordzin niet in te voeren. Je kunt dit uitbreiden met programma's zoals gnome-keyring / seahorse, keychain en andere key managers.