Einrichten von public Keys mit SSH

In dieser Anleitung zeige ich dir wie du ein SSH-Schlüsselpaar erstellst und die Anmeldung damit einrichten kannst.

Voraussetzungen

  • Ein System, auf dem Debian 11 ausgeführt wird
  • SSH ist sowohl auf dem Client als auch auf dem Remote-System bereits konfiguriert

Über SSH Schlüssel
SSH verwendet ein Schlüsselpaar zum Verschlüsseln und Entschlüsseln von Daten - einen öffentlichen Schlüssel und einen privaten Schlüssel. Wenn ein privater Schlüssel zum Verschlüsseln der Daten verwendet wird, kann nur der entsprechende öffentliche Schlüssel sie entschlüsseln.

1. Suche nach vorhandenen Schlüsseln

Wenn dein System bereits über SSH mit einem remote-Server verbunden war, verfügt es möglicherweise bereits über SSH-Schlüssel.

Suche nach bereits vorhandenen Schlüsseln indem du folgenden Befehl in einem Terminal eingibst:

ls -l ~/.ssh/id*

Wenn das System antwortet, dass es keine solche Datei oder kein solches Verzeichnis gibt, hat das System keine SSH-Schlüssel.

user@debian:~$ ls -l ~/.ssh/id*
ls: cannot access '/home/user/.ssh/id*': No such file or directory

Wenn das System eine Datei auflistet, dann hat es bereits einen Schlüssel. Um dieses Schlüsselpaar weiterhin zu verwenden, fahre mit Schritt 3. Schlüssel auf remote-System kopieren fort. Alternativ kannst du dieses Schlüsselpaar sichern und dann mit der Generierung eines neuen SSH-Schlüsselpaars fortfahren.

2. SSH-Schlüsselpaar erstellen

In diesem Schritt erstellen wir einen öffentlichen und einen privaten Schlüssel.

  1. Im Terminal folgenden Befehl ausführen: ssh-keygen

  2. Standardmäßig wird dadruch ein 2048-Bit-RSA-Schlüsselpaar erstellt.
    Für zusätzliche Sicherheit kann ein 4096-Bit-RSA-Schlüsselpaar mit der Option -b 4096 wie folgt hinzugefügt werden:

ssh-keygen -b 4096

Das System fragt nun nach dem Speicherort für dein Schlüsselpaar. Standardmaßig wird ~/.ssh/id_rsa verwendet.

  1. Um diesen Speicherort zu akzeptieren, bestätige mit der Enter-Taste.

  2. Wenn auf deinem System bereits ein Schlüssel vorhanden ist, wirst du nun aufgefordert den alten Schlüssel zu überschreiben.
    Drücke y um fortzufahren.

user@debian:~$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
/home/user/.ssh/id_rsa already exists.
Overwrite (y/n)? y

Achtung
Das Überschreiben des alten Schlüssels zerstört diesen. Das System kann sich nicht mehr mit dem alten Schlüssel authentifizieren.

  1. Als nächstes fordert dich dein System auf, eine Passphrase einzugeben und zu bestätigen. Dies ist eine zusätzliche Ebene der SSH-Sicherheit, die Benutzer dazu zwingt, die Passphrase einzugeben, wenn sie sich über SSH verbinden. Lege eine Passphrase fest und bestätige sie, oder lass das Feld leer, um diesen Schritt zu überspringen.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
  1. Schließlich werden die die Identifikation und der Ort des öffentlichen Schlüssels, der Fingerabdruck und das Zufallsbild des Schlüssels angezeigt.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:eJ89tfrU/f4dsPiG+eV0q4i/L08GeFUHk7gpeXlvnVg user@debian
The key's randomart image is:
+---[RSA 4096]----+
|             .o+.|
|            . o..|
|           . =   |
|       .  + * .E |
|      . S. = o+.o|
|       . ..oooo+=|
|          o.=+o=+|
|          .+==+ *|
|         ..+OBo+*|
+----[SHA256]-----+

3. Schlüssel auf remote-System kopieren

3.1 Automagisch

  1. Die einfachste Methode ist mit folgendem Befehl:
ssh-copy-id user@hostname

Ersetze den user durch den tatsächlichen Benutzernamen für das remote-System. Ersetze außerdem den Hostnamen durch den deines remote-Systems. Anstelle eines Hostnamens kannst du auch die IP-Adresse des entfernten Systems verwenden.

  1. Das System versucht nun sich mit dem von dir angegebenen Zugangsdaten mit dem remote-System zu verbinden.
    Bei der ersten Verbindung kann das System antworten, dass die Authentizität des Hosts nicht festgestellt werden kann.
    Gebe hier yes, gefolgt von der Enter-Taste ein.

  2. Nun wird das lokale System nach dem Schlüssel id_rsa.pub durchsucht welchen wir vorhin erstellt haben.
    Dann fordert es dich zur Eingabe des Passworts für den Zugang auf dem remote-System auf.
    Gib das Passwort ein und bestätige mit Enter.

Notiz
Das Passwort wird dir während der Eingabe nicht angezeigt.

  1. Dir werden jetzt die anzahl der hinzugefügten Schlüssel angezeigt. In der Regel ist dies 1.
    Dann zeigt es dir Anweisungen für die ANmeldung an deinem remote-System an.
    Du kannst den Befehl so eingeben wie er dir angezeigt wird.

Notiz
Standardmäßig enthält Debian 11 den Befehl ssh-copy-id. Wenn es nicht enthalten ist, kann es als Teil des Pakets openssh-server installiert werden indem du diesen Befehl ausführst:

sudo apt-get install openssh-server

3.2 Manuell

Wenn es nicht möglich ist den Schlüssel automatisch kopieren zu lassen, kannst du ihn auch manuell kopieren.

  1. Zuerst lass dir den Schlüssel anzeigen:
cat ~/.ssh/id_rsa.pub

Dir wird der vorhin generierte Schlüssel angezeigt. Er sollte beginnen mit ssh-rsa AAAA

  1. Speichere dir die Zeichenkette
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCvlIWUjvDqhhWD/zvzSsnBSwSNoPB2tkKNMgYi/vk4wXhQoMDbIf4wN0G+W8T7CM3\
rterTknn83LFFcBxLSE7lKxWipUIn2TSfsNlaAHbROYC4/YY+G73i7QBYJKEsxPIbUbvto53OXKl6ROO4ZDj4jNSaqOSVBGEV4G3gmB\
n1Igk44UI7JZMD7jKwHOdlR7tKcSp0vfk1n7AxJfuojgjM2hI7ayMItbOEF2YNRjcYPRODrB4XMiuQOMV5dYl/kb1pHTSQL/5KAU26+\
xsp69i1fDARi01GiLZBSWDEhO98Q/oPbyUypXbvHatMwXFYfPAzozsb4huxu0yfpgW1Prm3lULUXpZ0OOa0zdq6p6lQ7HSyOqfDPzYu\
igr9HPCjIghyQROUwOElpBdMbToz+GhuUUqrOk4zIHFfAYwUa7xeflw52tLeDcOjrPTke7pArHToT9M9a7Q4WmbvQIKipaejidusvfe\
JdMUEXBactoJCrtbfXVf/7JuyBA+fG1SW0sLGCDi78+thkJRmp6DMErZCJYGf/DDO/bdktSIKwuWY2OP9DuCvsC9hjNEAC3pacD7VIp\
f9LfWncSvHQQzXgOM539FX9AjyVPs4jSr3LROGumrdkgsVOXyghU5Ilgk8HP7bcEFuLZMKZi3JS70QTp6PrAGRd8eJRIs1zyrZZHEbj\
Q== user@debian
  1. Melde dich jetzt auf deinem remote-System an. Erstelle dort ein neues Verzeichnis für deinen Key:
sudo mkdir -p ~/.ssh

Notiz
Wenn das ~/.ssh Verzeichnis bereits existiert, wird der Befehl enden ohne eine Änderung vorzunehmen.

  1. Füge deinen Schlüssel der Datei authorized_keys hinzu:
sudo echo ssh_public_key >> ~/.ssh/authorized_keys

Ersetze ssh_public_key mit dem kopierten Schlüssel aus Schritt 2.

  1. Setze die richtigen Berechtigungen auf das Verzeichnis:
sudo chmod -R go= ~/.ssh
  1. Wenn du den Debian root Account nutzt, musst du den Besitzer explizit angeben:
chown -R user:user ~/.ssh

4. Mit SSH anmelden am remote-System

  1. Öffne am Client-System ein Terminal und gebe folgendes ein:
ssh user@hostname

Natürlich ersetzt du user mit deinem usernamen und hostname mit dem Hostnamen/IP des remote-Systems.

  1. Das System könnte dir jetzt anzeigen, dass die Authentizität des Hosts nicht festgestellt werden kann. Hier yeseingeben und mit Enter bestätigen.

  2. Wenn du im Schritt 2. SSH-Schlüsselpaar erstellen eine Passphrase festgelegt hast, wirst du nun aufgefordert diese einzugeben..

  3. Du solltest jetzt mit dem remote-System verbunden sein.

5. Passwort authentifizierung deaktivieren (optional)

Das Deaktivieren der Kennwortauthentifizierung ist eine Sicherheitsvorkehrung. Es verhindert Brute-Force-Angriffe gegen die SSH-Passwort Authentifizierung.

Achtung
Bevor du jetzt weiter machst, stelle sicher das du:

  • Dich ohne Passwort am Server anmelden kannst
  • Dein Benutzeraccount sudo Rechte hat
  1. Melde dich am remote-System an:
ssh user@hostname

Dieser Benutzer sollte sudo Rechte haben.

  1. Bearbeite die Daten /etc/ssh/sshd_config

  2. Finde und bearbeite folgende Zeilen entsprechend:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
  1. Speichere die Änderungen, beende den Editor und starte den SSH-Dienst neu:
sudo systemctl restart ssh