SSH Key mit ed25519

Start » SSH Keypair mit ed25519 erstellen

Update: 08.11.2023 Wie man den Schlüssel sicher auf einen Remote Host überträgt

Über den Nutzen von SSH Keys, in Verbindung mit gesicherten Verbindungen gibt es hinreichend Wissen und Anleitungen und eigentlich muss auch das hier nicht gesondert erwähnt werden.

ed25519 ist eine verhältnismäßig neue kryptographische Lösung die den “Edwards-Curve Signature Algorithm” (EdDSA) implementiert. Vielleicht ist der Kelch an den Gewohnheitstieren auch einfach nur vorbeigezogen, ed zu verwenden. Immerhin ist die Implementierung in OpenSSH schon einige Jahre her.

Was macht ed25519 jetzt besonders? Warum ist es eine gute Idee ed25519 zu verwenden?

  • Es ist schnell(er), sowohl bei der Generierung als auch der Verifizierung des Keys
  • Es ist sicherer
  • Höhere Collision Resilience. Es ist somit weniger empfänglich gegen sogenannte Hash Collision Attacken.
  • Schlüssel sind kleiner

Schlüsselpaar erstellen

Das geschieht bekanntermaßen mit der Übewrgabe von Parametern an den Befehl zur Generierung des Schlüsselpaares:

ssh-keygen -t ed25519 -C "may.be@your-mailaddre.ss"

Alle verfügbaren Parameter kann man sich mit den manpages ausgeben lassen: man ssh-keygen. Interessant ist hier der -f Parameter, der die gezielte Ausgabe des Schlüssels an einen anderen Ort und eine andere Datei ermöglicht.

Der Aufruf erzeugt zunächst die Abfrage nach einem Kennwort. Ist kein Kennwort zum Schutz des Schlüssels gewünscht, drückt man zweimal ENTER. Quittiert wird der Befehl dann mit der Ausgabe des Speicherorts samt Dateiname. Dem Fingerprint und dem Randomart Key Image.

Der Demo-Key, wird mit -f /pfad/zu/key in den entsprechenden Ablagepfad erzeugt. Damit vermeidet man das versehentliche Überschreiben eines bestehenden Schlüssels… (Stichwort: “no backup, no mercy”).

ssh-keygen -t ed25519 -C "test@te.st" -f /root/.ssh/id_test_ed25519

Die Rückgabe (Quittung) sieht für den Demo-Key wie folgt aus.

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_test_ed25519
Your public key has been saved in /root/.ssh/id_test_ed25519.pub
The key fingerprint is:
SHA256:EVm4MYBmWTygN0vL7gdgtDetfzSfjy33atFH2F+iVOA test@te.st
The key's randomart image is:
+--[ED25519 256]--+
|    .*o..+. ..   |
|  ..= o =. .  .  |
| ..++. ..+  E. o |
|  ++o+. ..  . o +|
| . o+o  S  . o oo|
|   .o   o   o . o|
|    .o . o . . . |
|   .  o . +oo    |
|    .. .  .=+o.  |
+----[SHA256]-----+

Jetzt gibts das Schlüsselpaar – und nun?

Der Public Key ist der teil des Schlüssels, der z.B. in einen Automaten (Chef, Ansible, Puppet) oder von Hand auf einem Server abgelegt wird. Ziel kann die Datei /<userbase>/.ssh/authorized_keys sein. D.h. die Ausgabe von cat id_test_ed25519.pub geht in die authorized_keys.

cat /<userbase>/.ssh/id_test_ed25519.pub >> /<userbase>/.ssh/authorized_keys
Bash

Deren Ausgabe dann wie folgt aussehen kann.

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL2vkiMT6ao9xxTcRhiYtRu6HMlWIXugYb+HW5jGU0eR test@te.st

Die Verbindung gegen den Server kann dann originär mit dem Verweis auf den Private Key erfolgen

ssh -i /<userbase>/.ssh/id_test_ed25519 targetuser@111.222.333.444

Damit ist ein schnelles und sicheres Authentifizierungsverfahren etabliert. Der Schlüssel kann somit eine Vielfalt von Aufgaben zugewiesen bekommen. Es ist dabei immer darauf zu achten, dass das Keypair nicht kompromittiert werden kann und vor unberechtigtem Zugriff geschützt wird.

[Update]

Schlüssel auf Server übertragen

Um den Schlüssel (Key) auf einem Remote Host verfügbar zu machen, nutze ich von meinem lokalen Rechner aus die Kommandozeile (MAC). Unter Windows musst Du sicherstellen, dass die Verbindung mit SSH an der Kommandozeile überhaupt funktioniert (Windows-Linux-Subsystem; puTTy; etc). Auf der Seite des Hosts, ist dafür nur das Wissen über den SSH-Zugriff und die Zieldatei notwendig. Es wird hier der Inhalt der .pub auf dem Host in die letzte Zeil der authorized_keys angehängt (>>).

cat id_test_ed25519.pub | ssh targetuser@111.222.333.444 "cat >> /<targetuser>/.ssh/authorized_keys"
Bash

Quellen

(1) https://www.cryptopp.com/wiki/Ed25519
(2) https://www.rfc-editor.org/rfc/rfc8032
(3) https://linux-audit.com/using-ed25519-openssh-keys-instead-of-dsa-rsa-ecdsa/
(4) https://en.wikipedia.org/wiki/Hash_collision

Schreibe einen Kommentar