SSH ist ein Pro­to­koll, um eine ver­schlüs­sel­te Ver­bin­dung zu einem Rechner oder Server her­zu­stel­len und ist ins­be­son­de­re bei der Linux-​Administration die häu­figs­te Ver­bin­dungs­art. Stan­dard­mä­ßig meldet sich der Nutzer dabei per Be­nut­zer­na­me und da­zu­ge­hö­ri­gem Pass­wort beim Server an. In dieser An­lei­tung möchte ich dir nun eine weitere Methode vor­stel­len –  der SSH Key ba­sier­ten Au­then­ti­fi­zie­rung.

Wie funktionieren SSH Keys?

Wie bereits zu Beginn erwähnt, gibt es ver­schie­de­ne Mög­lich­kei­ten, eine Ver­bin­dung per SSH mit dem Server her­zu­stel­len. Die ein­fachs­te und dir si­cher­lich bereits be­kann­te ist der Login mit Nut­zer­na­me und Pass­wort. Dies ist jedoch nicht die be­quems­te und zu­gleich deut­lich sichere Va­ri­an­te.

Obwohl die Pass­wör­ter alle ver­schlüs­selt zum Server ge­sen­det werden, sind diese oft wenig komplex oder lang genug, um vor An­grei­fern als sicher zu gelten. Zwar gibt es mit Fire­walls wie fail2ban Mög­lich­kei­ten, dass etwa feh­ler­haf­te Log­in­ver­su­che zum Ban führen, dennoch haben sich SSH Keys als die bessere Va­ri­an­te her­aus­ge­stellt.

SSH Keys be­stehen aus einem Schlüs­sel­paar:

  • einem pri­va­ten Schlüs­sel (engl private key, der nur dem Nutzer bzw. dem Rechner des Nutzers bekannt ist und niemals mit anderen geteilt werden darf) und einem daraus er­stell­ten
  • öf­fent­li­chen Schlüs­sel (engl. public key, der später zur SSH Au­then­ti­fi­zie­rung ver­wen­det wird).

Das geniale an dieser Methode ist, dass der öf­fent­li­che Schlüs­sel mit jedem geteilt werden kann. Wenn du z.B. Zugriff auf einem Server von einem Be­kann­ten be­kom­men möch­test, so gibst du deinem be­kann­ten den öf­fent­li­chen Schlüs­sel, den er dann im Server hin­ter­legt. So kannst du dich dann auf dem Server ein­log­gen, ohne dass dein Be­kann­ter ir­gend­wel­che ge­hei­men Daten wie zum Bei­spiel Pass­wör­ter von dir kennt. Nur der private Schlüs­sel kann den öf­fent­li­chen Schlüs­sel ent­schlüs­seln.


Installationsanleitung

Hier wird dir gezeigt, wie SSH Keys er­stellt und ver­wen­det werden. Zuvor soll­test du jedoch un­be­dingt den Ab­schnitt „Wich­ti­ge Tipps“ lesen und am besten auch be­fol­gen, um mög­li­che Si­cher­heits­ri­si­kos zu re­du­zie­ren.


Schritt 1: Wie erstelle ich einen SSH Key?

Der erste Schritt besteht im Ge­ne­rie­ren eines SSH Keys. Dieser Schritt sollte nicht auf dem Server, sondern auf deinem PC aus­ge­führt werden. Sofern du keinen PC mit Windows ver­wen­dest, kannst du es auch auf deinem lokalen Server wie z.B. Raspber­ry Pi aus­füh­ren.

Dazu gibst du fol­gen­de Befehl in der Konsole ein:

ssh-keygen -t dsa

Stan­dard­mä­ßig werden die Keys in /home/Benutzername/.ssh/id_rsa ge­spei­chert. Dies kannst du mit Enter be­stä­ti­gen.

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

An­schlie­ßend musst du ein Pass­wort für den private key ver­ge­ben und dieses an­schlie­ßend erneut ein­ge­ben. Der Schritt ist zwar op­tio­nal, ist aber drin­gend zu emp­feh­len. Da das Kenn­wort nur selten be­nö­tigt wird, kannst du hier ein langes, zu­fäl­lig ge­ne­rier­tes Pass­wort ver­wen­den.

Nun hast du die private und public keys er­stellt, die zur Au­then­ti­fi­zie­rung per SSH ver­wen­det werden können. Im nächs­ten Schritt muss der public key nun auf den Server kopiert werden, auf dem du dich ein­log­gen möch­test.

Schritt 2: Wie verwende ich einen SSH Key?


Die ein­fachs­te Methode zum „In­stal­lie­ren“ eines public keys auf einen Remote Server ist das Tool ssh-​copy-​id.

  • Grund­vor­aus­set­zung: Du bist mo­men­tan auf dem PC/​Server ein­ge­loggt, auf dem du den SSH Key er­stellt hast. Ebenso musst du Zugriff auf den Remote Server haben.

Gebe in der Konsole fol­gen­des ein:

ssh-copy-id [email protected]_Host
  • Be­nut­zer­na­me gibt den User­na­me auf dem Remote Server an.
  • Remote-​Host ist die IP bzw. der Host­na­me des Remote Servers

Mög­li­cher­wei­se musst du noch mit yes die Eingabe be­stä­ti­gen.

An­schlie­ßend wirst du noch auf­ge­for­dert, das Pass­wort des Nutzers auf dem Remote Server ein­zu­ge­ben.


Wichtige Tipps

Die Schrit­te eins und zwei haben dir gezeigt, wie SSH Keys erzeugt und in­stal­liert werden. Jedoch gibt es einige Punkte, die du un­be­dingt be­ach­ten soll­test.


Tipp 1: Nicht den Benutzer root für SSH verwenden

Häufig loggen sich Nutzer direkt mit dem Be­nut­zer root in den Server ein. Der Be­nut­zer root verfügt i.d.R. über root-, also Ad­mi­nis­tra­ti­ons­rech­te und kann sämt­li­che Ser­ver­ein­stel­lun­gen und Daten ver­än­dern. Um für einen mög­li­chen An­grei­fer den Zugriff zu er­schwe­ren, emp­fehlt es sich, einen nicht-​root-​Nutzer an­zu­le­gen, der etwa für den SSH Login ver­wen­det wird.

Nach dem SSH Login kannst du schließ­lich im­mer­noch mit dem Befehl sudo -i nach einer Pass­wort­ein­ga­be zum root wech­seln.

Um einen Be­nut­zer für SSH an­zu­le­gen, gehst du wie folgt vor (dabei musst du per root ein­ge­loggt sein):

  • Er­stel­len eines neuen Be­nut­zers:
useradd -m -d /home/neuerBenutzername -s /bin/bash neuerBenutzername
  • ein­log­gen in neuen Be­nut­zer:
su neuerBenutzername
  • Be­fol­gen der Schrit­te 1 bis 2 (siehe weiter oben)

Tipp 2: SSH Login per Nutzername und Passwort sperren

Es ergibt Sinn, zu­künf­tig bei allen SSH-​Verbindungen auf SSH Keys zu be­stehen. Dadurch ist der Login per Be­nut­zer­na­me und Pass­wort nicht mehr möglich.

Wichtig ist, dass vor diesem Schritt un­be­dingt ge­tes­tet werden sollte, ob der Login per SSH Key funk­tio­niert. Denn wenn nicht, hast du dich vom eigenen Server aus­ge­sperrt.

Um den Passwort-​Login zu de­ak­ti­vie­ren, musst du die Datei sshd_​config im Ver­zeich­nis /​etc/​ssh edi­tie­ren. Das geht am besten mit:

nano /etc/ssh/sshd_config

Suche darin nach Pass­wor­dAu­then­ti­ca­ti­on und ändere

Pass­wor­dAu­then­ti­ca­ti­on yes zu Pass­wor­dAu­then­ti­ca­ti­on no

Starte an­schlie­ßend den SSH-​Dienst neu (dabei kann die SSH-​Verbindung kurz ab­bre­chen):

service ssh restart

1 Kommentar

Spacefed · Januar 31, 2018 um 9:20 am

Hallo, danke für die An­lei­tung.
Habe bei mir auf dem Server (Ubuntu Server 16.04) SSH ein­ge­rich­tet. Das Problem welches ich nun habe ist, dass wenn ich den Server ein­schal­te und mich dann per SSH an­mel­den will der Key nicht ak­zep­tiert wird (server refused our key). Melde mich dann mit dem Pass­wort an. wenn ich danach die Ver­bin­dung wieder trenne und mich erneut mit dem SSH Key anmelde geht es ohne Pro­ble­me, auch dau­er­haft. Nächs­tes mal den Server ein­ge­schal­tet oder neu ge­star­tet geht es beim erste mal wieder nicht mehr und die wei­te­ren male funk­tio­niert es.
Ver­bin­den tu ich mich mit Putty auf Windows 7. Irgend eine Idee?

Kommentar verfassen