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 gibt‘s 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
BashDeren 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
Die typische Fragestellung für Google cat file to remote host ssh
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"
BashQuellen
(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