Heute wollte ich mich bei einem Kunden Daten aus dem GIT clonen, um diese zu aktualisieren. Leider war die Dokumentation für das entsprechende Repository nicht mehr aktuell und meine Kenntnisse für die Schlüsselerzeugung und einbindung auch nicht mehr ganz frisch. so musste ich etwas herumprobieren und Doku lesen bis es funktioniert hat. Hier nun die zusammenstellung der wichtigsten Erkenntnisse und Befehle.
Warum mit Authorized Keys arbeiten?
Diese Vorgehensweise mit Schlüsseln zu arbeiten, um das Deutsche Wort zu nutzen, hat mehrer Vorteile. Zum einen wird die Sicherheit durch die Verwendung von Schlüsseln erhöht. Bei einem Angriff auf den Server ist es unwahrscheinlicher einen Schlüssel mit ausreichender länge zu erraten als ein normales, durch einen User vergebenes Passwort. Zum anderen gestaltet sich die Verwendung von Zertifikaten für den Nutzer auch als recht einfach. So kann ein Zertifikat für mehrere Server verwendet werden. Wird auf der Serverseite ein Passwort geändert, so kann trotzdem weiterhin der SSH Key mit identischem Passwort verwendet werden. Zu guter letzt, auch dem Administrator nimmt es arbeit ab, da die Verwaltung von Schlüsseln auf den Servern oder für verschiedene Dienste oft einfacher ist als die Verwaltung von Usern mit Passwörtern und deren Synchronisation.
Den Schlüssel generieren!
Das Schlüsselpaar wird auf dem Client-Rechner erzeugt – in den meisten Fällen ist das der lokale Rechner.
ssh-keygen -t rsa Generating public/private rsa key pair.
Nun kommt die Abfrage nach dem zu verwendendem Verzeichnis und dem Namen der Datei:
Enter file in which to save the key (/Users/MYNAME/.ssh/id_rsa):
Enter speichert die Datei im vorgeschlagenen Verzeichnis. Bei einem neuen Schlüsselpaar ist der Default-Name immer id_rsa und id_rsa.pub.Da ich jedoch für verschiedene Dienste unterschiedliche Name verwende an denen ich sie später auch erkennen kann, habe ich hier einen eigenen Namen im vorgeschlagenen Verzeichnis gewählt:
Enter file in which to save the key (/Users/MYUSER/.ssh/id_rsa): /Users/MYUSER/.ssh/id_rsa_MY_SERVICE
Passphrase für mehr Sicherheit:
Um die Sicherheit zu erhalten, emphielt es sich den Schlüssel mit einem Passwort, einer Passphrase zu schützen. Dies ist die nächste Abfrage des Tools:
Enter passphrase (empty for no passphrase): Enter same passphrase again:
Es geht auch ohne Passphrase, aber das lokale Passwort ist ein weiterer Sicherheitsmechanismus. Die Sicherheit des Private Keys beruht unter anderem darauf, dass er für niemanden zugreifbar ist außer dem Besitzer. Sollte der Speicher auf dem er liegt kompromittiert werden (z.B. weil der Rechner gehackt oder gestohlen wird), kann sich der Angreifer ohne die Passphrase immer noch nicht auf den Systemen einloggen, auf denen wir den Public Key später hinterlegen. Der private Key sollte niemals weitergegeben werden oder für andere zugreifbar sein.
Die Erzeugung der Schlüssel
Hier noch einmal alle Ausgaben zusammen ohne es in kleine Schritte zu gliedern:
ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/MYUSER/.ssh/id_rsa): /Users/MYUSER/.ssh/id_rsa_MY_SERVICE Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/MYUSER/.ssh/id_rsa_MY_SERVICE. Your public key has been saved in /Users/MYUSER/.ssh/id_rsa_MY_SERVICE.pub. The key fingerprint is: SHASHA256:t2MuVakt4BTyTGcc36nfoWqg3qZaYy6LaIPKO/hR9N4 MYUSER@MYCLIENT The key's randomart image is: +---[RSA 2048]----+ | ... | | . o +. . . | | . = + ..o | | . . = o. | | . .oS..+. . | | . . ..o+......| |o . .+E.=. .. .| |++....+.++ o. | |+==. o=+ooo. | +----[SHA256]-----+
Der Private Key (private Schlüssel) liegt jetzt unter /Users/MYUSER/.ssh/id_rsa_MY_Service
Der Public Key (öffentlicher Schlüssel) unter /Users/MYUSER/.ssh/id_rsa_MY_SERVICE.pub
-rw------- 1 MYUSER staff 1,6K 29 Mai 12:26 id_rsa -rw-r--r-- 1 MYUSER staff 417B 29 Mai 12:26 id_rsa.pub -rw-r--r--@ 1 MYUSER staff 5,3K 29 Mai 11:34 known_hosts
Den Inhalt des Public Key lässt sich wie folgt anzeigen und kopieren
Den Inhalt des Public Keys ausgeben:
cat /Users/MYUSER/.ssh/id_rsa_test.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwLmRUh0xYRoSn7H/ocw ...MYUSER@MYCLIENT
Den Public Key in die Zwischenablage kopieren:
pbcopy < ~/.ssh/id_rsa_test.pub
Konfiguration für die Verwendung des Schlüssels bei SSH
Falls die der erste generierte Schlüssel ist, wird das Verzeichnis wie oben abgebildet leer sein und ihr auf Fehler laufen, wenn ihr nun versucht eine SSH Verbindung aufzubauen (abgesehen davon, dass hier bisher nciht beschrieben ist, wie der Schlüssel auf einem Server / einem Dienst hinterlegt wird).
touch ~/.ssh/config vi ~/.ssh/config
# Der Befehl touch legt die Datei an
# Mit vi landet ihr im Editor, um die Datei zu bearbeiten.
In der kurzen Variante lässt sich die Datei auch direkt mti vi erstellen und bearbeiten und der touch Befehl wird weggelassen.
In die Datei tragen wir folgendes ein:
Host ZielHost.de IdentityFile ~/.ssh/id_rsa__MY_Service
Schlüssel für Bitbucket hinterlegen:
https://URLzurINSTALLATION.de/stash/plugins/servlet/ssh/account/keys/add
Das Bild benötigt wohl keine weitere Erklärung. Einfach den Public Key in die Zwischenablage kopieren und in das vorgesehene Feld einfügen. Fertig.
Passphrase für Private Key ändern
Das -p Flag fordert eine Änderung der Passphrase für den Private Key an. ssh-keygen erfordert für den Wechsel die alte Passphrase zur Bestätigung und zwei mal die neue Passphrase.
ssh-keygen -f id_rsa -p Beitragsbild: https://pixabay.com/photo-2323278/ von User: mastersenaiper