Hier möchte ich zeigen wie sich eine SSH-Verbindung mit Schlüsseln statt mit Passwörtern einrichten lässt. Dies erhöht die Sicherheit, da es so zum Beispiel nicht möglich ist, den SSH-Server mit Brute-Force-Attacken "anzugreifen" und so ein Passwort zu knacken.
Zuerst zeige ich dann wie man sich mit einem selbst erstellten Private-Key unter Linux mit dem "SSH"-Befehl verbindet. Die Windows-User werden auch nicht außen vor gelassen, es wird auch noch erklärt wie ein vorhandener Schlüssel in Verbindung mit dem SSH-Client "PuTTY" verwendet werden kann.

Beispielkonfiguration:

Der Rechner "Server" ist der Server, auf dem wir uns nachher per SSH mit Hilfe unseres Schlüssel einwählen möchten. Der Rechner "Client" ist ein ganz normaler PC, der sich nachher auf den Server verbindet.
Der Benutzer "ssh-login" ist in diesem Beispiel ein lokaler Benutzer auf unserem SSH-Server, mit dessen Account wir uns nachher auf dem Server einwählen möchten. Man kann sich nur mit diesem Benutzer und dem Schlüssel per SSH einwählen.

1.) Schlüsselpaar erzeugen

Zuerst muss ein Schlüsselpaar erzeugt werden:

root@Client:/# ssh-keygen -t rsa -b 4096

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
(in diesem Ordner werden die beiden Schlüssel erstellt)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
(hier kann ein Schlüssel-Passwort eingegeben werden. Dies ist nicht zwingend nötig. Falls ein Passwort vergeben wird, muss dieses später beim Verbinden mit dem SSH-Server eingegeben werden)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
2e:05:28:5c:5f:81:86:23:a4:c6:bf:34:6e:fb:e3:c2

Es werden im Pfad /root/.ssh/ nun zwei Dateien angelegt: id_rsa und id_rsa.pub. Die erste Datei ist der private Schlüssel, dieser muss nachher auf jeden Client verteilt werden, von dem aus wir uns auf den SSH-Server verbinden wollen. Dieser Schlüssel sollte nicht in falsche Hände geraten!
Die zweite Datei ist der öffentliche Schlüssel und muss nun im zweiten Schritt auf den Server kopiert werden. Der Server erwartet den öffentlichen Schlüssel eines Benutzers in der Datei ~/.ssh/authorized_keys (falls nicht anders festgelegt).

2.) Den öffentlichen Schlüssel auf den Server kopieren

Am einfachsten geht das (wenn möglich) mit SCP. Ansonsten halt per E-Mail, Samba-Freigabe oder sonst wie:

root@Client:/# scp id_rsa.pub root@SERVER:/home/ssh-login/.ssh/

3.) Den öffentlichen Schlüssel am Server authorisieren

Nun melden wir uns am Server an und kopieren den öffentlichen Schlüssel in das SSH-Verzeichnis unseres "ssh-login"-Benutzers, mit dessen Rechten wir uns ja nachher einwählen möchten:

root@Server:/# cat id_rsa.pub >> /home/ssh-login/.ssh/authorized_keys

Jetzt muss noch die Zugehörigkeit der Datei geändert werden:

root@Server:/# chown ssh-login:ssh-login /home/ssh-login/.ssh/authorized_keys

..und die Rechte:

root@Server:/# chmod 600 /home/ssh-login/.ssh/authorized_keys

Dann muss noch die Schlüsseldatei gelöscht werden:

root@Server:/# rm id_rsa.pub

Ab sofort ist der öffentliche Schlüssel dem Benutzer "ssh-login" auf dem Server bekannt, d.h. über diesen Benutzer können wir uns am SSH-Server anmelden.

4.) SSH-Konfigurationsdatei anpassen

Nun muss der SSH-Dienst auf dem Server noch so eingerichtet werden, dass zukünftig keine Passwörter sondern nur noch SSH-Schlüssel akzeptiert werden:

root@Server:/# vi /etc/ssh/sshd_config

UsePrivilegeSeparation yes
PermitRootLogin no
UsePAM no
StrictModes yes
RSAAuthentication no
PubkeyAuthentication yes
HostbasedAuthentication no
ChallengeResponseAuthentication no
PasswordAuthentication no
AllowUsers ssh-login

ACHTUNG! Wenn der Rechner außerhalb eurer Reichweite (z.B. in einem Rechenzentrum) steht, dann auf keinen Fall die bisherige Sitzung schließen! Wenn die Authentifizierung über den Schlüssel nicht funktioniert, habt ihr sonst ein Problem und kommt nicht mehr rein! Also erst wenn alles funktioniert, die bestehende SSH-Verbindung schließen!

Dann den SSH-Dienst neustarten:

root@Server:/# service ssh restart

5.) Per SSH am Server anmelden

Nun müssen wir uns wieder an den Client-PC setzen. Die Datei id_rsa muss sich bei dem jeweiligen Benutzer in dem Verzeichnis ~/.ssh/ befinden und die Rechte 600 besitzen.
In diesem Beispiel sind wir als Root angemeldet, also kopieren wir die Datei "id_rsa" in das .ssh-Verzeichnis des Root-Benutzers:

root@Client:/# mkdir /root/.ssh

root@Client:/# cp id_rsa /root/.ssh/

und setzen die Besitzrechte auf Root und die Dateirechte auf 600:

root@Client:/# chown root:root /root/.ssh/id_rsa && chmod 600 /root/.ssh/id_rsa

Dann melden wir uns am SSH-Server an:

root@Client:/# ssh ssh-login@SERVER

Wenn bei der Schlüssel-Erstellung kein Passwort angegeben wurde, sollte man sich jetzt direkt auf dem Server befinden. Wurde ein Passwort angegeben, muss man dieses nun eingeben.
Das Angeben des jeweiligen Benutzernamens (hier: ssh-login) ist hier wichtig, da wir beim Server den Public-Key ja nur bei unserem "ssh-login"-Benutzer hinterlegt haben. Würde man hier keinen Benutzer mitgeben, würde er versuchen sich mit dem Root-Account anzumelden - dies würde natürlich fehlschlagen.

Liegt die id_rsa NICHT in dem .ssh-Verzeichnis des momentanen Benutzers, können wir diesen Pfad auch beim SSH-Befehl mitgeben:

root@Client:/# ssh -i /pfad/zur/id_rsa ssh-login@SERVER

6.) Mit PuTTY verbinden

Jetzt habe ich erklärt, wie man sich unter Linux und dem SSH-Befehl auf den Server verbinden kann. Manchmal hat man ja aber auch einen Windows-PC und möchte sich über den nützlichen SSH-Client "PuTTY" verbinden.
Hier erkläre ich deshalb kurz, wie man ein vorhandenes Zertifikat in das PuTTY-taugliche "PPK"-Format umwandeln kann.

6.1.) Umwandeln in das PPK-Format

  • Das Programm PuTTY Key Generator (PuTTYgen) herunterladen und starten
  • Auf "File" -> "Load Private Key" klicken und die Datei id_rsa auswählen.
  • Falls ein Passwort bei der Schlüssel-Erstellung angegeben wurde, muss dieses jetzt eingegeben werden.
  • Auf den Button "Save private key" klicken und die Datei beliebig nennen.

6.2.) Verwendung in PuTTY

Diesen Schlüssel wollen wir jetzt natürlich auch verwenden, um uns auf dem Server per PuTTY einzuwählen.

Dazu geht man folgendermaßen vor:

  • PuTTY starten und eine Verbindung anlegen
  • dann den Schlüssel über "SSH -> Auth" hinzufügen (siehe Bild)

Putty mit SSH-Schlüssel

Key nachträglich verschlüsseln

Wenn man sich einen unverschlüsselten Key angelegt hat und diesen aber nachträglich doch noch mit einem Passwort versehen möchte, ist das kein Problem.

Dazu einfach folgenden Befehl ausführen:

root@Client:/# ssh-keygen -p

Daraufhin werden wir gefragt, welchen Key wir verschlüsseln möchten. Standardmäßig ist hier wieder /home/<user>/.ssh/id_rsa ausgewählt. Nach der zweimaligen Eingabe des neuen Kennworts ist der Key verschlüsselt.

Kontrollieren kann man das, indem man sich den Key ausgeben lässt:

root@Client:/# cat ~/.ssh/id_rsa

Ausgabe:

Proc-Type: 4,ENCRYPTED