SSH

From Frack - Hackerspace Friesland
Jump to navigationJump to search
Onderwerp: SSH
SSH-Logo.jpg
Deskundigen
Gebruiker Elmer.jpg Elmer
Gebruiker Elmer.jpgElmer de Looff (Elmer) Rol: niet-deelnemer Deskundig met: Arduino, ENC28J60, Elektronica, GnuCash, HTML, LPD8806, Linux, MediaWiki, Mercurial, Netwerken, OpenVPN, Programmeren, Python, SSH, Software, Solderen Beginnend met: Dm-crypt, Javascript Werkt aan: Geen projecten :(
,
Gebruiker Groveld.jpg Groveld
Gebruiker Groveld.jpgMartin Groeneveld (Groveld) Rol: niet-deelnemer Deskundig met: Arduino, Canvas, Elektronica, HTML, SSH, Solderen Beginnend met: AVR, Linux Werkt aan: Geen projecten :(
Onderdeel van Linux, Beveiliging
SSH wordt o.a. gebruikt in
Beest64

Een praktische handleiding voor het gebruik van SSH. Uitleg over het aanmaken van sleutels, gebruik hiervan voor aanmelden op externe systemen, verspreiding van sleutelgegevens, en configuratie voor gemakkelijker verbinden.

Secure Shell (kortweg: SSH) is een protocol uit de toepassingslaag van de TCP/IP-protocolgroep. De term ssh werd gemakshalve ook gebruikt voor het clientprogramma dat het protocol toepast (het serverprogramma heet sshd, 'Secure Shell daemon'). SSH vervangt oudere protocollen zoals telnet, rlogin, en rsh/rexec door een beveiligbare variant daarvan. De standaard poort van SSH is 22.


Wikipedia, Secure Shell

Op deze pagina zijn een aantal praktische gebruiken en toepassingen van SSH en de configuratie daarvan te vinden.

SSH identiteit

Een identiteit (ook wel key/sleutel genoemd) biedt eenvoudige en veilige toegang tot andere systemen.

Een identiteit bestaat uit 2 delen;

  • Een prive deel; Dit bevat het cryptografische geheim van de sleutel en dient niet verspreid te worden;
  • Een publiek deel; Dit is geschikt om breed te verspreiden, en geeft andere beheerders de mogelijkheid om je (met je prive sleutel) toegang te verschaffen tot hun systemen.

Waarom geen wachtwoord?

  • Goede wachtwoorden duren lang om in te typen en zijn foutgevoelig;
  • Korte wachtwoorden bieden weinig bescherming en worden makkelijk afgekeken;
  • Alle wachtwoorden zijn kwetsbaarder voor woordenboek/brute-force aanvallen;
  • Sleutels maken het inloggen sneller, veiliger en makkelijker.

Aanmaken

Veruit het meestgebruikte algoritme om een SSH-sleutelpaar te maken is RSA. Door de eigenschappen van de key (gebaseerd op grote priemgetallen ipv willekeurige bits als in bijvoorbeeld AES) dient deze langer te zijn (meer bits te bevatten). 1024 Bits RSA is vergelijkbaar met ~80 bits AES, en wordt kraakbaar geacht anno 2010. 2048 Bits wordt veilig geacht tot 2030 – voor de nodige marge (en omdat voor de meeste van onze toepassingen processorgebruik niet de limiet vormt) gebruiken we hier 4096-bit sleutelparen.

Op een doorsnee Linux systeem is een SSH sleutelpaar aan te maken met het volgende commando: ssh-keygen -b 4096 -f keyname. Hier wordt met -b de sleutellengte opgegeven en de naam van de sleutel met -f.

Een key wordt in twee delen gemaakt. Het prive-deel (met dezelfde naam als opgegeven na -f) en het publieke deel (hier wordt .pub achter geplaatst).

Een voorbeeld van het genereren van een sleutelpaar in Ubuntu 11.10:

elmer@Penrose:~/.ssh$ ssh-keygen -b 4096 -f frack
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in frack.
Your public key has been saved in frack.pub.
The key fingerprint is:
4d:e6:87:58:66:ce:70:81:b3:82:c3:f4:55:64:57:8b elmer@Penrose
The key's randomart image is:
+--[ RSA 4096]----+
|         += ...  |
|    .   +. o . . |
|   o o ..oB E .  |
|    + o .# .     |
|     . .S * .    |
|           .     |
|                 |
|                 |
|                 |
+-----------------+

elmer@Penrose:~/.ssh$ cat frack
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

elmer@Penrose:~/.ssh$ cat frack.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCgwXydN6uh8Nob/36sJCh2AAPPKEkLbiFCSSd/It7/WJv6i4
6pbP0VHnpYm7bp/gVGwZiiNyU+Sn6bLeEHTo4jHUN/urDQfjjMlOBgsBfZnliZNKJYzax22MQumx6teC+0DH04
QoG414YZCXaxRlG6J+C2W8D3v5Kopwu2/NCPHAIsVHGoRRZFZbsgGmfuSWnAg1AByXTG0of5dBAiaKjFU15jZL
dJoYy1A7PQwOFmpDeg3wc18YIVbuWTYIF+0jqL2rBejRLgaEGKWANdOkz0dYxfGJZX6ARyWs7JFrybPWGyiLIr
c3sGkScPcNlnrNNYRlmNqNAhxLAjoHnIc87TFB+KNALld7ZZKoFFC3oW1pBnjMxJwguWXoc2dm7NeIgu8zorPY
Z8ZUWQmVAU0uPn8vUEhvphVJH7NwuaoJmFvTvX11Pt0Nd7q/30cLknu9d4cELrbOVOfgCOwboTwz4q7rwWjJq/
1UV+3BQ8RVp/7/5pbhqvXma2lNE35qfkH3ivyluTBRihye1izekjA2mlHBSNnWxZ2MlgleI7lo6TR1dl2uIpyK
CZyaJ5rXQ/Uo/erpj1DIKPlOwsRW5oSlhYpg66vGXFGvgH3uyx4KuCYGDrERTVaG3EwNN6jmvwBAS6ZlM/E+Bk
sYhGGnAXP5G0u6YFpt9VFgTofdIzSn/R2w== elmer@Penrose

# De publieke sleutel is hier voor leesbaarheid over meer lijnen verspreid;
# In de praktijk dient deze in relevante bestanden op EEN regel te staan.

Een wachtwoord op de prive-sleutel is sterk aan te bevelen wanneer deze op een draagbaar medium als een USB-stick wordt gezet. In alle andere gevallen is het naar eigen voorkeur/paranoia :-)

SSH Logins op basis van sleutels

Sleuteldistributie

Nu we een sleutel aangemaakt hebben kunnen we deze gebruiken voor authenticatie op andere computers. Daarvoor dienen we wel het publieke deel van de sleutel op de remote server te plaatsen. Hiervoor zijn een aantal mogelijkheden.

Copy/paste

Log in op de andere server en maak in de homedir de map .ssh aan (als deze nog niet bestaat). Open daarna met je favoriete editor het bestand authorized_keys en paste hierin je publieke sleutel.

scp & ssh

Efficienter (en beter automatiseerbaar) is de methode die gebruik maakt van secure copy (scp) en SSH remote commands:

scp frack.pub user@remote_machine:
ssh user@mach.example.com "cat frack.pub >> .ssh/authorized_keys"

Dit kopieert de zojuist gemaakte publieke sleutel naar de server dmv van het SSH-protocol (secure copy), en voegt daarna de inhoud van het sleutelbestand toe aan het authorized_keys bestand. (Als het bestand nog niet bestaat, wordt het automatisch aangemaakt.) Waar nodig kan het vorige commando uitgebreid worden tot mkdir .ssh; cat keyfile.pub >> .ssh/authorized_keys om de .ssh map aan te maken als deze niet al bestaat.

ssh-copy-id

Deze tool werkt met de prive-sleutel, en voegt de publieke delen die nodig zijn om in te loggen naar het opgegeven systeem toe aan het authorized_keys bestand. Waar nodig worden de .ssh directory en het bestand authorized_keys aangemaakt, en worden de rechten aangepast (schrijfrechten alleen voor de gebruiker, niet voor group en all). Met nieuwgemaakte keys is dit veruit te makkelijkste manier om je eigen key op een remote systeem te plaatsen:

ssh-copy-id -i frack user@mach.example.com

Downloaden met wget

Een laatste manier om de key op de andere computer te plaatsen, of deze door andere mensen te laten installeren zodat je tot deze systemen toegang kunt verkrijgen. Het vereist dat de key eenmalig op een publieke webserver geplaatst wordt, maar hierna is distributie kinderspel:

wget -O- http://keyserver.com/frack.pub >> ~/.ssh/authorized_keys

Dit doet een http-verzoek naar de webserver met de publieke sleutel en stuurt de inhoud van deze pagina naar stdout. Deze wordt daarna toegevoegd aan het authorized_keys bestand.

SSH client configuratie

Standaard SSH instellingen, en ook host-configuraties kun je hier kwijt. Vooral deze laatste is handig in te zetten, omdat hier een hoop typewerk mee te besparen is. Uitleg over alle configuratie-instellingen gaat voorbij het doel van deze uitleg, maar is te verkrijgen door middel van man ssh_config.

Een voorbeeldconfiguratie om het verbinden naar een externe machine eenvoudig te houden:

ServerAliveInterval 90
 
Host frack
  HostName        space.frack.nl
  User            frack
  Port            443
  IdentityFile    ~/.ssh/frack

Deze configuratie zet de keepalive timer van SSH naar 90 seconden, zodat bij een korte netwerkonderbreding niet direct de SSH verbinding verloren wordt. Verder is het verbinden naar het beschreven systeem vereenvoudigd van:

ssh frack@space.frack.nl -p443

naar:

ssh frack

Bovendien zijn deze geconfigureerde hosts met tab automatisch aan te vullen, wat het gemak verder verbetert. Inloggen als andere gebruiker is eenvoudig te realiseren met ssh gebruikers@frack.

SSH server configuratie

  • Wachtwoord-logins geheel uitschakelen
  • Directe root-login uitschakelen