Die Public-Key-Authentifizierung ist eine Authentifizierungsmethode, die unter anderem von SSH und OpenSSH verwendet wird, um Benutzer mit Hilfe eines Schlüsselpaars, bestehend aus privatem und öffentlichem Schlüssel, an einem Server anzumelden. Ein solches Schlüsselpaar ist wesentlich schwerer zu kompromittieren als ein Kennwort.

Wikimedia Foundation Inc.

Ziel

  • Eigenen Schlüssel generieren
  • Schlüssel auf Server übertragen
  • Passwort-Authentifizierung deaktivieren

Vorgehen

Im Internet finden sich überwiegend Beschreibungen wie ich ein RSA-Schlüsselpaar generieren kann. Allerdings ist RSA, abhängig von der Schlüssellänge, nicht die sicherste Variante.

🚨 DSA: Ist unsicher und wird seit OpenSSH Version 7 auch nicht mehr unterstützt!
⚠️ RSA: Es hängt von der Schlüsselgröße ab. Wenn der Schlüssel 3072 oder 4096 Bit lang ist, dann ist alles in Ordnung. Bei einer geringeren Länge sollte man wahrscheinlich aufrüsten. Die 1024-Bit-Länge wird sogar als unsicher angesehen.
👀 ECDSA: Es hängt davon ab, wie gut der Rechner eine Zufallszahl erzeugen kann, die zur Erstellung einer Signatur verwendet wird. Es gibt auch Bedenken bezüglich der Vertrauenswürdigkeit der NIST-Kurven, die von ECDSA verwendet werden.
✅ Ed25519: Es ist der am meisten empfohlene Algorithmus für öffentliche Schlüssel, der heute verfügbar ist!

Medium.com

Vorraussetzungen

Dieser Artikel baut auf folgende Artikel auf:

Schlüsselpaar generieren

Als erstes muss ich auf meiner lokalen Maschine ein Schlüsselpaar generieren. Ich selbst befinde mich im Apple Environment und zum generieren vom Schlüssel kann ich die Boardmittel von Mac OS nutzen. Kurze Empfehlung an dieser Stelle: iTerm2. „iTerm2 bringt das Terminal in das moderne Zeitalter mit Funktionen, von denen Sie nie wussten, dass Sie sie schon immer wollten.“

ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "max@mustermann.de"
  • ssh-keygen: Dienstprogramm für OpenSSH-Authentifizierungsschlüssel
  • -o: Speichern Sie den privaten Schlüssel im neuen OpenSSH-Format und nicht im PEM-Format. Diese Option wird impliziert, wenn Sie den Schlüsseltyp als ed25519 angeben.
  • -a: Dies ist die Anzahl der KDF-Runden (Key Derivation Function). Höhere Zahlen führen zu einer langsameren Verifizierung der Passphrase und erhöhen die Resistenz gegen Brute-Force-Kennwortknacken, falls der private Schlüssel gestohlen wird.
  • -t: Gibt die Art des zu erstellenden Schlüssels an, in meinem Fall den Ed25519.
  • -f: Dateinamen der erzeugten Schlüsseldatei angeben. Wenn er automatisch vom SSH-Agenten erkannt werden soll, muss er im Standardverzeichnis .ssh in meinem Heimatverzeichnis gespeichert werden.
  • -C: Eine Option zur Angabe eines Kommentars. Er ist rein informativ und kann alles sein. Normalerweise wird er aber mit <login>@<hostname> gefüllt, der den Schlüssel erzeugt hat.

Im Windows Environment empfiehlt sich das Tool PuTTYgen (Teil vom PuTTY-Projekt). Eine gute Anleitung findet sich bei der Uni Mainz.

Öffentlichen Schlüssel übertragen

Der schnellste Weg meinen Schlüssel auf meinen Server zu kopieren ist der Befehl ssh-copy-id.

ssh-copy-id -p 22 -i ~/.ssh/id_ed25519.pub username@remote_host

Bei Windows muss der öffentliche Schlüssel des Gerätes in das Verzeichnis ~/.ssh/ kopiert werden.

Anmeldung via Passwort unterbinden

Warnung: Nach diesem Schritt kann ich mich nicht mehr per Kennwort anmelden! Also unbedingt eine Session zum Server offen halten und mit einer neuen Verbindung/Session testen!

Nun pass ich die Konfiguration meines Servers an und öffnen dafür die Konfigurationsdatei von OpenSSH auf dem Server.

sudo nano /etc/ssh/sshd_config

Ich suche nach der Zeile PasswordAuthentication yes und negiere diese.

PasswordAuthentication no

Nun muss ich noch Speichern und die Konnfiguration laden.

sudo service ssh restart

Nun gilt es das Fenster mit der aktivien Verbindung geöffnet zu lassen und in einem neuen Fenster das einloggen nochmal zu testen. Wenn das geklappt hat teste ich auch nochmal den wechsel zum root-Benutzer via su. Hat das alles geklappt kann ich das öffengehaltende Fenster beruhigt schließen.


Quellen

  • https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu
  • https://wiki.nitrado.net/de/Ubuntu_Server_absichern#SSH-Login_mit_SSH-Keys
  • https://www.ionos.de/digitalguide/server/konfiguration/server-absichern-linux-und-co-richtig-konfigurieren/
  • https://medium.com/risan/upgrade-your-ssh-key-to-ed25519-c6e8d60d3c54
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-20-04
  • https://edv-kph.uni-mainz.de/2018/10/02/ssh-schluessel-mit-putty-generieren/
  • https://iterm2.com/index.html
  • https://www.chiark.greenend.org.uk/~sgtatham/putty/