Secure Shell Zelfstudie
Aan de slag met Secure Shell
Zoeken…
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 |
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
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.
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 [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:~#
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 [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:~#
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.
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.
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:
- Opdrachtregelopties
- Configuratiebestand van de gebruiker
~/.ssh/config - 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
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 [email protected] nu verbinding met ssh [email protected] 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.
