Was sind SSH Keys?
Linux Server sind meistens mit einem Passwort gesichert. Allerdings ist diese Methode zur Anmeldung aus Sicherheitsperspektive nicht sicher. Passwörter können, je nach Länge und Komplexität, relativ schnell mit einer Brute-Force Attacke oder eine Dictionary-Attacke geknackt werden. Bei der Nutzung von SSH Keys ist das nicht so einfach möglich. SSH Keys fungieren hier als eine Art „Keycard“, also eine Schlüsselkarte.
SSH Keys vs. Passwörter:
Wie in der kleinen Einleitung dieses Artikels bereits erwähnt, ist das Problem mit Passwörtern die Anfälligkeit, leicht geknackt werden zu können. Natürlich kann man die Sicherheit seines Passwortes durch u.a. die Länge und die Verwendung von Sonderzeichen und Zahlen verbessern. Nichtsdestotrotz besteht immer noch das Risiko einer Brute-Force Attacke. Hierbei versucht ein automatisiertes Programm sich auf z.B. Euren Server einzuloggen. Das Programm generiert sehr schnell sehr viele Passwörter und probiert so lange, sich anzumelden, bis es das richtige Passwort gefunden hat. Je nach Länge und Zusammensetzung des Passwortes und der Leistung der Maschine, von dem der Brute-Force Angriff ausgeht, kann so eine Attacke schnell erfolgreich sein, da dieses automatisierte System hunderte von Passwörtern in Sekunden durchprobiert. Nutzt man hier noch eine Liste der meistgenutzten Passwörter wird daraus eine Dictionary-Attacke (dt. Wörterbuchangriff).
SSH Keys nutzen allerdings das RSA-Kryptosystem. Ein asymmetrisches, kryptographisches Verfahren. Hierbei werden zwei Schlüssel erstellt, der Public Key (dt. öffentliche Schlüssel) und der Private Key (dt. privater Schlüssel). Die Methode zur Erstellung dieser Schlüssel ist so ausgefeilt und kompliziert, dass es unmöglich ist, diese zu knacken.
SSH Key Authentifikation erklärt:
- Das SSH Key Paar wird generiert. (Bestehend aus Public Key und Private Key)
- Der Public Key wird auf dem Server hinterlegt, der Private Key verbleibt auf dem Computer.
- Wenn Ich mich nun auf dem Server anmelden will, generiert der Server einen zufälligen String (z.B. Abfolge von Zahlen und Buchstaben) und verschlüsselt diesen mit dem Public Key. Dieser Verschlüsselte String kann nur mit dem dazugehörigen Private Key entschlüsselt werden.
- Der Server schickt diesen verschlüsselten String an meinen Computer. Nach dem Erhalt beginnt mein Computer damit, den verschlüsselten String mit dem Private Key zu entschlüsseln und übermittelt diesen dann an den Server. Stimmt nun der entschlüsselte String mit dem originalen String des Servers überein, wurde ich erfolgreich authentifiziert und erlange Zugriff auf den Server.
Keys generieren:
Linux:
Sollte Dein lokaler Computer mit Linux laufen, öffne zuerst ein Terminal.
Gib den folgenden Befehl ein, um ein Keypaar zu generieren:ssh-kssh-keygen -t rsa
Abhängig von Deiner Linuxversion kannst Du auch einen Namen und Speicherort für Dein Keypaar angeben. Der Standardpfad, unter welchem das Keypaar abgelegt wird, ist:
/root/.ssh
Die Datei id_rsa ist Dein Private Key und die Datei id_rsa.pub ist Dein Public Key.
Windows:
Sollte Dein lokaler Computer mit Windows laufen, empfehlen wir Dir das kostenlose Programm PuTTYgen, welches zusammen mit PuTTY installiert wird.
Solltest Du PuTTY noch nicht installiert haben, kannst Du es hier herunterladen:
https://www.puttygen.com/download-putty
Suche nun in der Windows Suchleiste nach PuTTYgen und öffne es.
Das Programm sieht so aus:
Klicke nun auf den „Generate“-Button und bewege Deine Maus über das leere Feld.
Deine Keys wurden nun generiert.
Key Comment vergeben (optional)
Wenn Du willst, kannst Du einen Key Comment vergeben. Dieser Comment wird dann sowohl in Deinem Public Key, als auch in Deinem Private Key gespeichert. Solltest Du Dich nun mit Deinem Key auf Deinem Server anmelden, wird der Key Comment, also sozusagen der Name des Keys in der Konsole angezeigt.
Vorteilhaft ist die Vergabe von Key Comments besonders in diesem Beispiel: Wenn Du Mitarbeitern Zugriff auf einen Firmenserver geben willst, kannst Du als Key Comment z.B. den Namen des Mitarbeiters eingeben und bekommst damit einen guten Überblick darüber, wer Zugriff auf Deinen Server hat. Sollte der Mitarbeiter das Unternehmen irgendwann verlassen, kannst Du den passenden SSH Key dank des Comments nun finden und z.B. löschen.
Key Passphrase vergeben (optional, empfohlen)
Um die Sicherheit Deines Private Keys zu erhöhen, hast Du zusätzlich die Möglichkeit, eine Passphrase zu vergeben. Hierbei wird Dein Private Key lokal mit dieser Passphrase geschützt. Solltest Du nun die SSH Key Authentifikation für Deinen Server verwenden, wirst Du beim Einloggen auf deinem Server nach dieser Passphrase gefragt. Der Unterschied zu der herkömmlichen Methode, sich einfach direkt via Passwort auf Seinem Server anzumelden ist der, dass die Passphrase nicht an den Server übertragen wird. Sie wird nur dazu genutzt, den Private Key lokal zu verschlüsseln bzw. zu entschlüsseln. Sollte jemand anderes nun Zugriff auf Euren Private Key bekommen, braucht Er zusätzlich auch die Passphrase, um sich auf Deinen Server einzuloggen.
Um den Public Key zu speichern kannst Du entweder den gesamten Text aus dem oberen Kasten kopieren, oder auf „Save Public Key“ klicken, um einen Speicherort auszuwählen.
Den Private Key speicherst Du, indem du auf „Save private key“ klickst und einen Speicherort auswählst.
Public Key auf den Server hochladen:
Nachdem Du dein Keypaar erstellt hast, muss der Public Key auf Deinen Server hochgeladen werden. Dies kannst Du entweder über ein FTP Programm tun oder über die Konsole.
Über FTP
Wenn Du Deinen Public Key über FTP hochladen willst, starte Dein FTP Programm und verbinde Dich als root-Benutzer mit Deinem Server. Erstelle im root-Verzeichnis nun den folgenden Ordner:
.ssh
Erstelle in diesem Ordner dann die Datei authorized_keys, welche eine Textdatei ist, und füge in dieser Datei dann den gesamten Public Key ein. Speichere die Datei nun ab.
Über die Konsole
Logge Dich über SSH als root-Benutzer auf Deinem Server ein.
Mit diesem Befehl erstellst Du den Ordner, in welchem der Key hochgeladen werden muss und gehst auch direkt in dieses Verzeichnis:mkdir /root/.ssh && cd /root/.ssh
Erstelle und öffne nun die authorized_keys Datei mit folgendem Befehl:nano authorized_keys
Füge hier nun den gesamten Text des PublicKeys ein und speichere die Datei mit der Tastenkombination [Strg+O] ab. Mit [Strg+X] kannst Du den Editor verlassen.
Private Key in PuTTY hinterlegen:
Nachdem Du ein Keypaar, bestehend aus Private Key und Public Key erstellt hast, und den Public Key auf Deinen Server hochgeladen hast, musst Du jetzt nur noch Deinen Private Key in PuTTY hinterlegen.
Öffne hierzu zunächst PuTTY.
Auf der linken Seite findest Du eine Liste mit verschiedenen Kategorien.
Unter Connection findest Du den Unterpunkt SSH, welchen Du mit einem Klick auf das kleine Plus [+] ausklappen kannst. Klicke danach auf Auth. Nun erscheint auf der rechten Seite ein Fenster. Mit einem Klick auf Browse… öffnet nun der Dateibrowser. Wähle hier Deinen Private Key aus.
Scrolle nun in der linken Liste wieder nach oben und wähle den Punkt Session aus.
Gibt nun im Feld Host Name Deine Server-IP ein und vergebe im Feld Saved Sessions einen Namen für dieses Profil. Mit einem Klick auf den Save-Button speicherst Du dieses Profil ab.
Somit hast Du Deinen Private Key jetzt in PuTTY hinterlegt und ein Profil für Deinen Server angelegt. Nun musst Du nicht jedes Mal, wenn Du Dich auf Deinem Server anmelden willst, Deinen Private Key neu auswählen.
Private Key in Pageant hinterlegen:
Alternativ zum hinterlegen Deines Private Keys in PuTTY kannst Du diesen auch in Pageant hinterlegen.
Pageant ist ein SSH-Agent, welcher zusammen mit PuTTY installiert wird.
Dieses Programm macht es Dir noch einfacher, Deine Private Keys in PuTTY zu nutzen.
Solltest Du außerdem z.B. eine Passphrase für deinen Private Key erstellt habe, musst Du diesen nicht bei jedem Sitzungsaufbau erneut eingeben, wenn du Pageant verwendest.
Suche in der Windows Suchleiste nach Pageant und führe das Programm aus.
Das Programm ist nun gestartet und findet sich im Systemtray (in der Taskleiste rechts) wieder:
Um einen Private Key zu importieren, führe einen Rechtsklick auf das Pageant-Icon aus und klicke auf “Add Key”.
Der Dateimanager öffnet sich. Wähle hier nun Deinen Private Key aus.
Solltest Du außerdem eine Passphrase für deinen Key erstellt haben, wirst Du nun aufgefordert, diese einzugeben.
Nun kannst Du dich wie gewohnt mit PuTTY auf deinen Server einloggen, ohne deine Passphrase jedes Mal, wenn du eine SSH Verbindung aufbauen willst, erneut eingeben zu müssen.
Bedenke, dass du deinen Private Key bei jedem Neustart Deines Computers wieder neu importieren musst!
SSH Key Authentifikation testen und Passwort deaktivieren:
Nachdem Du nun also ein Keypaar generiert, den Public Key auf Deinen Server hochgeladen und den Private Key in PuTTY hinterlegt hast ist es an der Zeit zu überprüfen, ob Deine neue Login Methode funktioniert.
Authentifikation testen
Um Deine neue Login Methode zu testen, genügt der Versuch, sich über das eben erstellte Profil bei PuTTY auf Deinem Server anzumelden. Nachdem Du einen Doppelklick auf das Profil ausgeführt hast, sollte sich eine Konsole öffnen, die Dich fragt, mit welchem Benutzer Du Dich anmelden willst. Dies ist in der Regel root.
Nachdem Du diesen Benutzernamen eingegeben hast und die Eingabe mit Enter bestätigt hast, solltest Du angemeldet werden. Außerdem erscheint während des Login-Prozesses die Nachricht „Authenticating with Public Key “ in der Konsole.
Passwort deaktivieren
Der Sinn der SSH Key Authentifikation ist das Verbessern der Serversicherheit. Nachdem Du Dich also dazu entschieden hast, SSH Keys als Login Methode zu verwenden, ist es nur logisch, die Passwortanmeldung zu deaktivieren. Öffne hierzu die sshd_config mit dem folgenden Befehl:
nano /etc/ssh/sshd_config
Setze die folgenden Parameter nun auf „no“:
ChallengeResponseAuthentication
PasswordAuthentication
UsePAM
Um nicht durch das ganze Dokumente scrollen zu müssen, kannst Du mit der Tastenkombination [STRG+W] eine Art Suchfeld öffnen. Dort gibst Du den Parameternamen ein und bestätigst das ganze mit [Enter]. So springt Dein Cursor direkt zu diesem Parameter. Sollten einige Parameter auskommentiert seien, also ein # davor haben, entferne dies.
Speichere die Änderungen mit [STRG+O] und verlasse den Editor mit [STRG+X].
SSH Key Authentifikation entfernen und Passwort-Authentifikation aktivieren:
Wenn Du wieder die Passwort Authentifikation anstatt der SSH Key Authentifikation verwenden möchtest, musst Du die zuvor auf „no“ gesetzten Parameter in der sshd_config wieder auf „yes“ setzen.
Außerdem musst Du den .ssh Order löschen. Dies kannst Du mit diesem Befehl tun:rm -R /root/.ssh
Starte zum Schluss noch den SSH-Service mit diesem Befehl neu:systemctl restart ssh