Pagina1 van 1

SSH Login zonder Wachtwoord

SSH Login zonder Wachtwoord
   3

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 decode (encrypt) van berichten,
Een “Public Key” voor encode” (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

 

Extra: Commando’s in een enkele regel op afstand uitvoeren

Nu we kunnen inloggen zonder wachtwoord, hier nog een paar eenvoudige voorbeelden hoe je snel en eenvoudig in een enkele regel commando’s op de doel server kunnen uitvoeren.

Merk op:

In deze voorbeelden moet je user vervangen door jouw gebruikersnaam, en server vervangen door de doel server/computer naam of IP adres.

Bij deze voorbeelden zie je aan het einde het volgende staan: ”  || exit 1; ” wat wil zo veel wil zeggen als “sluit de SSH verbinding/shell” en “return succes” (=1).

Onderstaande commando’s zijn voor Linux/macOS. Windows voor Windows zal dit in een vergelijkbare manier werken.

Voorbeeld 1: Geef directory inhoud weer

Het commando om een directory weer te geven is “ ls “.
Alles rondom “ls” kan worden hergebruikt voor andere commando’s.


ssh -t user@server "ls || exit 1;"

Voorbeeld 2: Geef de root directory weer, inclusief verbogen bestanden en in lang formaat

Hier een voorbeeld waarin je ziet dat je ook parameters kunt gebruiken;


ssh -t user@server "ls -al / || exit 1;"

Voorbeeld 3: WOL fix voor macOS – Scherm wakker maken met Caffeinate

In dit voorbeeld gebruiken we het Caffeinate commando onder macOS (standaard aanwezig), om het scherm wakker te maken via SSH.

Het commando is is:  caffeinate -u -t 1
Dit wil zeggen: -u zet het scherm aan (user “actief”), en -t 1 zet de timeout, zodat we het kort kunnen houden.

Ik gebruik dit om mijn Mac op afstand wakker te maken (inclusief scherm).

In mijn specifieke geval, wilde een MacBook Pro het scherm niet aanzetten na het sturen van een WOL (Wake On LAN) bericht.
Na veel zoek en experimenteer werk ontdekte ik het volgende:
Als een Mac laptop op het stopcontact is aangesloten, en verbonden met WiFi voor de laptop in slaapstand ging, en de WiFi chipset van de laptop WOL ondersteund, dan heb je niet eens Wake On LAN nodig. (dit werkt NIET met een USB Ethernet dongle!)

De WiFi verbinding blijft namelijk actief, zelfs als de Mac slaapt.
Zodra je dit naar de slapende MacBook stuurt, dan wordt de Mac wakker en gaat het scherm aan.


ssh user@server "caffeinate -u -t 1 || exit 1;"

 

 

 

Ondersteun ons ...


Jouw ondersteuning wordt zeer gewaardeerd, en hoeft zelfs niets te kosten. Bijvoorbeeld door links naar ons te delen op social media, of andere websites.

Andere vormen kunnen ook gratis zijn (b.v. shoppen op Amazon).
Alle opbrengsten worden gebruikt voor web-hosting kosten, project hardware en software, koffie, etc.

Hartelijk dank voor wie al heeft bijgedragen!
Het is altijd geweldig om te zien hoe men mijn artikeltjes en applicaties weet te waarderen.

Merk op dat het klikken op affiliate links een kleine commissie voor ons kunnen genereren - dit wordt zeer gewaardeerd.

Reacties


Er zijn 3 reacties welke je hieronder kunt lezen.
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.

  • 26 nov 2019 - 14:01 Reactie Link
    PingBack: www.tweaking4all.nl

    […]   Meer diepgang vind je in dit artikel: SSH Login zonder Wachtwoord […]

  • 28 dec 2019 - 22:40 - Marc Reactie Link

    Zeer goed uitgelegd. Dankuwel !

    Er staat volgens mij wel een fout in (tenzij je het daarboven verkeerd zou uitgelegd hebben):

    FOUT:

    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.

    GOED:

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

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

    Beantwoorden

    Marc

    • 29 dec 2019 - 11:42 - hans - Auteur: Reactie Link

      Hoi Marc,

      Dank je wel voor het compliment en … je hebt helemaal gelijk – nice catch! 
      Ik ga het meteen verbeteren!

      Beantwoorden

      hans



Jouw Opmerking ...

Plaats hier geen grote bestanden (zoals source codes, log files of config files). Gebruik hiervoor het Forum.

Delen:
*
*
Laat me per email weten als er nieuwe reacties zijn.
       Je kunt jouw RSS reader gebruiken om reacties te volgen.


Tweaking4All gebruikt de gratis Gravatar dienst voor Avatar weergave.