Nachdem wir im ersten Teil einen Open-SSH Server aufgesetzt und im zweiten Teil die grundlegende Konfiguration zur Absicherung vorgenommen haben, wollen wir nun im dritten Teil die Anmeldung per Schlüsseldatei (nachfolgend auch “Key”) konfigurieren.
Die SSH-Key Authentifizierung basiert auf dem Prinzip der asymmetrischen Verschlüsselung. Wir benötigen also ein Schlüsselpaar aus öffentlichem (public) und privatem (private) Schlüssel. Der öffentliche Schlüssel wird dann auf dem OpenSSH-Server hinterlegt und der private Schlüssel geht an den Client.
Oberstes Gebot dabei ist es, den privaten Schlüssel wirklich immer geheim zu halten. Kommt jemand anderes in den Besitz des privaten Schlüssels, kann er sich damit auf eurem Server einloggen.
Als kleine Hürde kann man den Private-Key selbst auch noch einmal mit einem Passwort versehen. Dennoch gilt, ist der Private-Key nicht mehr “privat”, so sollte schnellstens dafür gesorgt werden, dass das Gegenstück, der entsprechende Public-Key, vom OpenSSH-Server entfernt wird.
Um ein Schlüsselpaar zu generieren, gibt es mehrere Möglichkeiten. Zwei davon möchte ich nachfolgend weiter erläutern. Eine Möglichkeit ist die Erstellung mittels des Kommandozeilen-Tools “ssh-keygen”. Dieses kommt bei der Installation von openssh mit und ist somit unter Linux verfügbar. Bei dem OpenSSH for Windows Paket, war zum Zeitpunkt meiner Tests, das Tool leider nicht dabei.
Wer lieber mit einer grafischen Oberfläche arbeitet, sollte sich die zweite vorgestellte Möglichkeit ansehen. Mittels des Programms “PuttyGen” lässt sich das benötigte Schlüsselpaar auch ohne Kommandozeile und unter Windows erstellen.
Schlüsselpaar mittels ssh-keygen erzeugen
Eine Möglichkeit ein Schlüsselpaar zu erzeugen ist die Verwendung von ssh-keygen. Dieses Tool ist jedoch leider nicht bei der OpenSSH für Windows Installation enthalten. Entweder besorgt ihr euch also Zugriff auf einen Linux Rechner oder führt ssh-keygen auf dem Linux-Server aus, auf dem euer OpenSSH-Server läuft.
Hinweis: Dies solltet ihr aber nur tun, wenn ihr wirklich sicher seid, dass niemand anderes auf den Server Zugriff hat. Das wäre zum Beispiel bei einem Mediaserver bei euch im LAN der Fall, wenn ihr alle Netzwerknutzer kennt und der Server keinen Internetzugriff hat. Vor allem bei Shared-Server-Umgebungen solltet ihr hingegen Vorsicht walten lassen und den Key lieber lokal/clientseitig generieren lassen.
Um ein neues Schlüsselpaar mit ssh-keygen zu generieren, benötigt ihr folgenden Befehl.
ssh-keygen -t rsa -b 4096
Der Parameter -t gibt hierbei das Verschlüsselungsverfahren an. (Für SSH Version 2 wäre statt RSA, wie hier im Beispiel, auch DSA gültig.) Der Parameter -b gibt die Schlüssellänge in Bits an.
Während der Ausführung des Befehls werdet ihr nach einem Passwort gefragt. Hier gilt es, einen guten Kompromiss zwischen Komplexität und Aufwand für die jeweilige Eingabe des Passworts zu finden.
Wichtig: Zwar besteht auch die Option gar kein Passwort einzugeben, davon ist aber dringend abzuraten. Gebt ihr kein Passwort ein, so genügt einem Angreifer, wie in der Einleitung dieses Artikels beschrieben, lediglich der Schlüssel, um sich auf eurem Server einzuloggen! Vergebt ihr ein Passwort, so muss der Angreifer dieses erst knacken, bevor er sich einloggen kann. Der Zeitrahmen um das Passwort der Schlüsseldatei zu knacken sollte wiederum genügen, um den Public-Key von eurem Server zu entfernen und ein neues Schlüsselpaar anzulegen.
Nach der Generierung des Schlüsselpaars habt ihr nun 2 Dateien erhalten.
id_rsa id_rsa.pub
Die Datei mit der Endung .pub ist euer Public-Key und gehört auf den Server. Falls noch nicht vorhanden legt ihr einen Ordner namens “.ssh” in eurem Home-Verzeichnis an und kopiert die rsa_id.pub Datei in diesen Ordner.
sudo mkdir -p ~/.ssh sudo mv id_rsa.pub ~/.ssh
Abschließend müsst ihr euren Public-Key noch in eine Datei namens authorized_keys einfügen. Dies könnt ihr mit folgendem Befehl tun.
cd ~/.ssh sudo cat id_rsa.pub >> authorized_keys
Schlüsselpaar mittels PuttyGen erzeugen
Wer keinen Zugriff auf einen lokalen Linux-Rechner hat und den Key nicht serverseitig generieren möchte, der kann z.B. auch PuttyGen nehmen. Dies ist ein Schlüsselgenerator aus der Putty-Suite. PuttyGen könnt ihr kostenlos herunterladen. Eine Installation ist nicht nötig.
Nach dem Start wählt ihr im unteren Panel die Länge des Schlüssels in Bits und das Verschlüsselungsverfahren aus. Danach klickt ihr auf “Generate”, um die Schlüsselgenerierung zu starten. Um die Generierung zu beschleunigen, könnt ihr mit der Maus willkürlich auf der PuttyGen-Oberfläche umherfahren. Die Bewegungen werden als Zufallsdaten genommen und in die Berechnung des Schlüssels mit einbezogen.
Ist der Schlüssel erstellt, solltet ihr noch ein Passwort für den Private-Key anlegen. Dies schützt euch wie gesagt bei Diebstahl des Schlüssels. (Zumindest für eine gewisse Zeit.) Das Passwort schreibt ihr einfach in die Felder “Key passphrase” und “Confirm passphrase”, welche nach der Generierung des Schlüssels sichtbar werden.
Nach dem Festlegen des Passworts können Private- sowie Public-Key mittels der beiden Save-Buttons gespeichert werden. Der Public-Key muss nun auf euren OpenSSH-Server übertragen werden (z.B. per USB-Stick, SSH/SCP, FTP etc.).
Einmal auf dem Server angekommen, muss der Key in eine Datei namens “authorized_keys”, die sich in dem Ordner ~/.ssh befinden sollte, geschrieben werden.
Habt ihr noch keine Keys dort gespeichert, so müsst ihr den Ordner erst anlegen.
sudo mkdir -p ~/.ssh sudo mv id_rsa.pub ~/.ssh
Anschließend fügt ihr den Public-Key dann in die authorized_files Datei ein.
cd ~/.ssh sudo cat id_rsa.pub >> authorized_keys
Anpassen der OpenSSH Server-Konfiguration
Im letzten Schritt muss noch die Konfiguration des OpenSSH-Server angepasst werden, sodass dieser den Login per Schlüsseldatei erlaubt. Öffnet hier zu die sshd_config.
sudo vim /etc/ssh/sshd_config
Und ändert die Zeile, die mit “PasswordAuthentication” beginnt, wie folgt ab.
PasswordAuthentication no
Durch diese Einstellung wird der Login per reinem Passwort untersagt und nur noch Nutzer mit Schlüsseldateien können sich einloggen. Somit werden sämtliche Bruteforce- und Passwortlisten-Attacken unbrauchbar.
Um die Änderungen zu übernehmen müsst ihr die sshd_config noch speichern, schließen und dann die geänderten Einstellungen einmal im OpenSSH-Dienst neuladen. Dies geht wie folgt.
sudo service ssh reload
Nun steht serverseitig alles, was wir für den Login mittels Schlüssel-Dateien brauchen. Nachfolgend möchte ich noch ganz kjurz zeigen, welche Parameter bzw. Einstellungen nötig sind, um sich mit einem Client und Schlüssel-Datei auf einem SSH-Server einzuloggen.
Mittels Private-Key und OpenSSH einloggen
Der Login mit einem Private-Key funktioniert sowohl mit OpenSSH als auch mit OpenSSH for Windows. Der benötigte Befehl ist dabei fast identisch mit dem, welchen ich euch im ersten Teil der Artikelserie gezeigt habe. Es kommt lediglich noch ein Parameter “-i” hinzu.
ssh meinbenutzername@meineip -p meinport -i "PfadZuMeinemPrivateKey"
“meinbenutzername” ist der Name des Accounts auf dem SSH-Server, in den ihr euch einloggen wollt.
“meineip” kann entweder die IP-Adresse des Servers sein oder alternativ auch der Hostname.
“-p meinport” ist optional und sollte angegeben werden, wenn ihr den Port geändert habt, auf dem euer SSH-Server läuft. “”PfadZuMeinemPrivateKey” muss je nach Betriebssystem angegeben werden. Unter Windows mit Backslashes und unter Linux logischerweise mit Slashes. Beispiel Windows: “C:\meinekeys\id_rsa”. Beispiel Linux: “~/meinekeys/id_rsa”.
Mittels Private-Key und Putty einloggen
Um sich mit Putty und dem eigenen Private-Key einzuloggen, muss der Private-Key in den Einstellungen von Putty angegeben werden. Dies geht im Menüpunkt “Connection->SSH->Auth”. Jedoch benötigt Putty den Key in seinem eigenen PPK Format. Sollte euer Private-Key also mit ssh-keygen generiert worden sein, so müsst ihr diesen zuerst umwandeln. (Wenn ihr dies schon getan habt könnt ihr den nächsten Absatz überspringen.)
Um den Private-Key in das PPK-Format umzuwandeln, benötigen wir wieder das Tool “PuttyGen”. Nach dem Start von “PuttyGen” kann im Menü über “Conversions->Import key” der Private-Key eingelesen werden. Mittels des Buttons “Save Private-Key” lässt dieser sich dann im PPK-Format speichern.
Wenn ihr nun den Private-Key im PPK-Format vorliegen habt, öffnet ihr Putty. Dort wählt ihr eure Verbindungseinstellungen aus oder gebt neue an und wechselt vor dem Login in den Menüpunkt “Connection->SSH->Auth”. Hier könnt ihr in dem Feld “Private key file for authentication:” den Pfad zu eurem Private-Key angeben. Das war es auch schon. Wenn ihr euch nun per Putty einloggt, wird der Login mittels Key-File vorgenommen.
Fazit
Somit wären wir am Ende der dreiteiligen Artikelserie. Ich hoffe ihr konntet ein bisschen was lernen und euch haben die Artikel gefallen. Wenn ihr noch Fragen habt oder Anregungen für einen weiteren Artikel, dann lasst es mich in den Kommentaren wissen.
I’ll gear this review to 2 types of people: current Zune owners who are considering an upgrade, and people trying to decide between a Zune and an iPod. (There are other players worth considering out there, like the Sony Walkman X, but I hope this gives you enough info to make an informed decision of the Zune vs players other than the iPod line as well.)
Bin begeistert, sie haben mir sehr geholfen. Danke
Hallo Raffael,
danke für guten Artikel.
Ich hatte eine Frage. Wir benutzen einen zwischen Server um uns mittel Putty auf Servern in einem Netzwerk anzumelden. Also zwischen server ist: sedcam01.corpintra.net und diesen Server leitet uns auf tatsächlichen Server wo wir uns anmelden wollen z.B.: seddes08.corpini.net. Wir werden auch mit root Berechtigungen angemeldet. Also Aufruf sieht wie folgt aus: hemat@root@seddes08.corpini.net
Meine Frage ist, wie kann ich mich hier mittels Priv.-Pub-Key anmelden. Wo soll Pub-Key installiert werden? Auf sedcam01.corpintra.net oder auf seddes08.corpini.net ? Mein Keys oder root Keys?
Grüsse,
Hemat