Pagina1 van 1

SSH Login zonder Wachtwoord

SSH Login zonder Wachtwoord
   0

In dit artikel laat ik je zien hoe je SSH (Secure Shell) veiliger kunt maken zonder een wachtwoord te gebruiken – m.b.v. SSH-keys.

SSH staat een aantal diensten toe over een veilige verbinding (encrypted enzo), maar het meeste wordt het wel gebruikt voor Shell (command line) toegang.
Het wordt dan ook gezien als een veiliger alternatief voor Telnet, rlogin, rsh etc.

De meeste gebruikers, zeker als we net beginnen met SSH, gebruiken een username en password voor SSH access, maar dit is niet de meest veilige methode.
Het is veiliger, en eenvoudiger, als men zogenaamde SSH-keys gebruikt, en in dit artikel laat ik je zien hoe het werkt en hoe je er mee aan de slag kunt.




Overview

Wat is SSH?

Voor we beginnen met de uitleg hoe je SSH Login zonder wachtwoord kunt gebruiken, even snel kijken wat SSH really en wanneer je het gebruikt.

Persoonlijk gebruik ik SSH om Shell toegang te krijgen tot een andere computer bijvoorbeeld mijn web server, mijn QNAP NAS, of mijn Raspberry Pi welke LibreElec (KODI) draait.
Vaak om bepaalde commando’s uit te voeren, zoals het wijzigen van wat instellingen of de installatie of verwijdering van iets op de betreffende computer.

Zie het als een Shell/Terminal/Command Prompt venster, welke op de andere computer draait.
Op de meeste platformen (macOS, Linux, Windows) lijkt het alsof je lokaal bezig bent, maar in plaats daarvan ben je aan het prullen op een andere machine.

Merk op: Voor macOS en Linux gebruikers zullen de commando’s sterke overeenkomst tonen met wat ze al gewend zijn in een Shell of in Terminal.
Windows gebruikers zullen misschien een beetje onwennig beginnen, omdat de Linux commano’s net even anders zijn dan wat Windows normaal gesproken op de Command prompt doet.

SSH Login zonder Wachtwoord – Hoe werkt dat?

Zeker in het begin, zullen gebruikers een username en password gebruiken bij SSH toegang.
Dit werkt prima natuurlijk, maar het is minder veilig dan met SSH-keys. Een wachtwoord is eenvoudiger te breken, dan het breken van een SSH-key.

Het alternatief, SSH-keys, maakt het wachtwoord niet alleen moeilijker te raden, maar maakt het wachtwoord ook significant langer.
Uiteraard zouden we hier uren over kunnen discussiëren, maar in dit artikel wil ik het juist simpel houden.

Public Key vs Private Key

Wanneer we naar encryptie kijken, dan zien we al snel termen zoals “Public Key” en “Private Key” – iets wat we hier gaan gebruiken.
Wat zijn die Keys dan en hoe werkt het?

Private Key

Een Private Key wordt gebruikt om berichten te ontsleutelen (decrypt).
Deze moet je altijd privé houden en met niemand delen.

Public Key

De Public Key wordt gebruikt om berichten te versleutelen (encrypt), het kan dus met anderen gedeeld worden.
Deze key kan nooit gebruikt worden om een bericht te ontsleutelen (decrypt).

Merk op: Dit soort sleutels maken we over het algemeen met OpenSSL tools, meer hierover later.

Het basis idee is:

We maken twee keys;
Een voor “encode” en een voor “decode” van berichten;

Een “Private Key” voor encode (encrypt) van berichten,
Een “Public Key” voor decode” (decrypt) van berichten.

Een simpel voorbeeld:

Stel Max wil dat Bram hem een geheim bericht stuurt, maar Max wil zeker weten dat niemand anders het bericht kan lezen.
Om dit te doen, geeft Max een zijn “Public Key” en vraagt Bram om met die key het bericht te versleutelen.
Na encryptie kan zelfs Bram het bericht niet meer decrypten en stuurt dit versleutelde bericht naar Max.
Max heeft natuurlijk zijn eigen “Private key”, waarmee hij het geheime bericht van ontsleutelen.

Voorbeeld van Private en Public Keys voor encryptie

Voorbeeld van Private en Public Keys voor encryptie

 

SSH Login met SSH-keys

Hoe gaan we dit nu werkende krijgen voor onze SSH verbindingen?

De procedure bestaat uit 3 stappen.

Stap 1 – Maak een Public en een Private Key set

We moeten natuurlijk eerste beide keys hebben en zullen ze dus moeten genereren.
Merk op dat dezelfde set keys gebruikt kan worden voor meerdere verschillende servers.
Dit hoeft niet perse, je kunt ook een set per server maken, maar dat komt met de nodige uitdagingen die we in dit artikel over gaan slaan.

Stap 2 – Geef de server jouw Public Key – Dit hoeft maar 1 keer.

De tweede stap is dat we onze Public Key aan de server (de andere computer) moeten geven –  dit hoeven we maar 1 keer te doen.
Op deze manier weet de server nu welke Username en Public Key combinatie eventueel SSH toegang zou mogen hebben.

In deze stap moeten we een verbinding opzetten met de server, met onze standaard username en password login, zodat we onze “Public Key” kunnen afgeven.
De Public Key wordt op betreffende machine in een specifieke locatie opgeslagen, inde home directory van betreffende gebruiker (~/.ssh/authorized_keys ).

Stap 3 – Voor elke SSH Login – Geef de server onze Username en Public Key

Elke keer dat we een SSH login doen, moeten de volgende stappen worden doorlopen.
Als gebruiker merk je hier niets van, het gebeurt allemaal automatisch op de achtergrond.

  1. Stuur username en onze public key (meestal “id_rsa.pub“) naar de server.
  2. De server kijkt dan of het de betreffende combinatie kent (staat in “authorized_keys“).
  3. Indien gevonden, dan zal de server een uniek bericht genereren en deze vervolgens versleutelen met de Public Key.
  4. Onze computer ontvangt dit bericht en kan het met de Private Key ontsleutelen en het ontsleutelde bericht dan terug sturen naar de server.
  5. De server kan het ontvangen bericht nu vergelijken met wat het originele bericht was en als het matched SSH toegang geven.

 

In een vergelijkbare flow, zoals in het simpele voorbeeld van eerder:

SSH Login met Public en Private Keys

SSH Login met Public en Private Keys

 

SSH Login zonder Wachtwoord – In Praktijk Toepassen

Nu we weten hoe dit in de achtergrond werkt, tijd om dit in de praktijk te gaan toepassen.
Ik hanteer hier bewust de meest eenvoudige methode, er zijn nogal wat opties die dit verhaal misschien onnodig moeilijk zouden kunnen maken.
Je kunt bijvoorbeeld jouw keys beveiligen met een wachtwoord, of complexere encryptie algoritmen gebruiken (ik gebruik hier RSA voor encryptie).

Stap 1 – Aanmaken van een Public en een Private Key (eenmalig)

Uiteraard hebben we een setje keys nodig en die gaan we nu genereren.
Dit werkt voor zowel macOS, Linux als Windows.

Na deze stap hebben we 2 bestanden: De Private Key (id_rsa) en de Public Key (id_rsa.pub).

Beiden worden opgeslagen in onze home directory (Linux/macOS: ~/.ssh/  en Windows: C:\Users\<username>\.ssh\.

Het lijkt erop dat de directory .ssh onder macOS en Linux already vaak al bestaat of automatisch wordt aangemaakt.
Mocht je een foutmelding krijgen, dan kan het zijn dat je betreffende directory moet aanmaken (zeker onder Windows het geval).

Ik heb wat extra parameters toegevoegd om het e.e.a. makkelijker te maken, maar de korte versie kan ook werken: ssh-keygen.
De extra parameters zorgen ervoor dat we weten waar de key bestanden staan (-f) en dat we ze niet met een wachtwoord willen beveiligen (-P).

macOS/Linux:


ssh-keygen -f ~/.ssh/id_rsa -t rsa -P ""

 Let op: Onder macOS en Linux zijn bestandsnamen en directory namen (zoals .ssh) die met een punt beginnen onzichtbaar.

 

Windows:

Windows moeten eerst de .ssh directory aanmaken … 

Ik he dit enkel onder Windows 10 getest en het lijkt erop dat delen van OpenSSL al geinstalleerd staan.

Voor de opslag van de SSH-keys moeten we echter zelf een directory aanmaken.
In Command Prompt: mkdir C:\Users\<username>\.ssh

Uiteraard moet je “<username>” vervangen door jouw username (kijk eens met dir C:\Users\ waar je misschien kunt achterhalen wat dit zou moeten zijn).


ssh-keygen -f C:\Users\<username>\.ssh\id_rsa -t rsa -P ""

Merk op: vervang “<username>” door jouw username of user directory naam (kijk eens met: dir C:\Users\).

 

 

De output ziet er ongeveer zo uit:


Generating public/private rsa key pair.
Your identification has been saved in \Users\Hans\.ssh\id_rsa.
Your public key has been saved in \Users\Hans\.ssh\id_rsa.pub.
The key fingerprint is:
SHA256:N0k/xd1qAAX77qoG8HAfIUGmU1Co4Y72kWSJ+GqabHg hans@MAC
The key's randomart image is:
+---[RSA 2048]----+
| .=* .|
| . .+ . . +.|
| . o +o o . + +|
| . . * o + = ..|
| . = .S = + +. |
| + + * o + .|
| . o . . o . .|
|+ E . . . . |
|*+ o..oo|
+----[SHA256]-----+

 

Stap 2 – Give de Server onze Public Key (eenmalig)

Waarschwuing: Als je nieuwe keys genereert, dan zul je die nieuwe keys weer aan de server moeten doorgeven omdat ze anders zullen zijn.

Er zijn een aantal methoden, waarvan 2 de meest gangbare; de oude methode en de methode die gebruik maakt van ssh-copy-id.
Helaas voor de Windows gebruikers, ssh-copy-id lijkt niet te bestaan onder Windows (Ik vond deze op GitHub voor wie interesse heeft).

Vervang “<username>” met de login username voor deze server, en vervang “<server-ip-address>” met het IP adres van de server.

De optie “-o StrictHostKeyChecking=No” zorgt er alleen maar voor dat je een vraag kunt overslaan – SSH zal de server automatisch toevoegen aan de “known hosts” .

Je moet jouw login wachtwoord deze ene keer nog wel invoeren!

macOS en Linux – De makkelijke methode met ssh-copy-id


ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<server-ip-address> -o StrictHostKeyChecking=No

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.100 -o StrictHostKeyChecking=N

macOS en Linux – De oudere methode met cat


cat ~/.ssh/id_rsa.pub | ssh <username>@<server-ip-address> 'mkdir -p .ssh; cat >> .ssh/authorized_keys'

cat ~/.ssh/id_rsa.pub | ssh admin@192.168.1.100 'mkdir -p .ssh; cat >> .ssh/authorized_keys'

Windows – De lastige methode omdat ssh-copy-id niet bestaat

Vervange “<userdirectory>” met de juiste gebruikers directory naam op jouw PC (zoek met: dir C:\Users\).


type C:\Users\<userdirectory>\.ssh\id_rsa.pub | ssh <username>@<server-ip-address> -o StrictHostKeyChecking=No "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1;"

type C:\Users\Hans\.ssh\id_rsa.pub | ssh admin@192.168.1.100 -o StrictHostKeyChecking=No "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1;"

Stap 3 – Test of SSH Login zonder Wachtwoord ook werkt

Dit is wel de eenvoudigste stap, en de methode waarmee je in de toekomst een SSH sessie kunt starten (werkt hetzelfde voor macOS, Linux en Windows);


ssh <username>@<server-ip-address>

ssh admin@192.168.1.100

 

 

Donatie opties


Donaties worden zeer gewaardeerd maar zijn echt niet verplicht. Donaties worden gebruikt om de web-hosting kosten te dekken, hard- of software aan te schaffen voor projecten die we hier bespreken, of zo nu en dan voor een pilsje of een kopje koffie!

Reacties


Er zijn nog geen reacties geplaatst.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een bestaande opmerking plaatsen door op de "Beantwoorden" knop te klikken.



Jouw opmerking ...

Vriendelijk verzoek om hier geen lange bestanden te posten (zoals source codes, log bestanden of config bestand). Gebruik het Forum hiervoor.

Deel:
*
*
Stuur me een notificatie van nieuwe opmerkingen (email).
       Je kunt jouw RSS reader gebruiken op opmerkingen te volgen.


Tweaking4All gebruikt de gratis Gravatar dienst voor de weergave van Avatars.
Tweaking4All deelt jouw email adressen NOOIT.