Login form
 
> Register

SSH Keys erzeugen

Anleitung um ein SSH Keypaar zu erzeugen und dieses auf ein entferntes System zu kopieren um eine passwortlose SSH Anmeldung zu ermöglichen.

Voraussetzungen

Auf dem Zielsystem muss die Authentifizierung mit einem Schlüsselpaar erlaubt sein. Ebenso muss für das Kopieren des Schlüssels in Schritt 2 die Authentifizierung über Passwort erlaubt sein.

PubkeyAuthentication yes
PasswordAuthentication yes

Sind die beiden Parameter nicht gesetzt greift der Standardwert und der ist für beide bereits auf "yes". Änderungen benötigen jeweils einen Neustart des ssd Dienstes.

Schritt 1: Key erzeugen

Dies wird mit normalen Benutzerrechten auf demjenigen System ausgeführt von dem aus auf den Zielserver zugegriffen werden soll.

testuser@localhost:~> ssh-keygen -t ed25519 -N '' -f /home/testuser/.ssh/id_ed25519 -C 'testuser@domain.tld'
Generating public/private ed25519 key pair.
Your identification has been saved in /home/testuser/.ssh/id_ed25519_3.
Your public key has been saved in /home/testuser/.ssh/id_ed25519_3.pub.
The key fingerprint is:
SHA256:80e9DDBh4JXHhQK3kziBmsxZsoAY/D6cJ4Tc3M3nw2c testuser@domain.tld
The key's randomart image is:
+--[ED25519 256]--+
|+o .+o=o o. |
|o.. . o. *o++ |
|. =+.Bo + *o |
| o =B. o o + . |
| + . S o . |
| * . * E o . |
| + = . o |
| . |
| |
+----[SHA256]-----+

Dies ist die empfohlene Art um ab OpenSSH 7 ein Keypaar zu erzeugen.Der Parameter -N '' sorgt dafür, dass man ein Keypaar ohne Passwort erzeugt, mit -f wird der Speicherort des Schlüsselpaares angegeben und mit dem optionalen Parameter -C kann man noch einen Kommentar mitgeben. Für weitere Optionen kann man die "man"-page befragen (man ssh-keygen).

Wenn Komatibilität mit älteren Systemen gefordert ist, kann man auch RSA als Verschlüsselungsverfahren nutzen, dann aber wenigstens mit 4096 Schlüssellänge, also so:

testuser@localhost:~> ssh-keygen -t rsa -b 4096 -N '' -f /home/testuser/.ssh/id_rsa -C 'testuser@domain.tld'

Die Bitlänge ist beim ed25519 Verfahren fest - von daher wird der Parameter -b dort ignoriert

Schritt 2: Schlüssel auf den entfernten Server kopieren

Nun muss der öffentliche Schlüssel natürlich noch auf das Zielsystem kopiert werden. Dazu gibt es ein weiteres nützliches Tool welches dies für uns erledigt. Wichtig dabei ist, dass man mit Benutzernamen und Passwort bereits auf das Zielsystem einloggen kann, denn diese Authentifizierung benutzt auch das Kopiertool:

testuser@localhost:~> ssh-copy-id -i /home/testuser/.ssh/id_ed25519.pub testuser@zielsystem.domain.tld
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/testuser/.ssh/id_ed25519.pub"
The authenticity of host 'zielsystem.domain.tld (192.168.1.11)' can't be established.
ECDSA key fingerprint is SHA256:7AsP9+CqEnlYFJsCIQyPSZGTaNDF8ws+NjFe2Fesbtk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'testuser@zielsystem.domain.tld'"
and check to make sure that only the key(s) you wanted were added.

Anschliessend sollte man ohne Passwort auf das Zielsystem einloggen können:

testuser@localhost:~> ssh testuser@zielsystem.domain.tld
Last login: Fri Mar 20 18:57:23 2020 from 192.168.1.22
testuser@zielsystem.domain.tld:~>

Schritt 3: Sicherheit erhöhen

Da wir nun mit einem Schlüsselpaar auf das Zielsystem einloggen können, bietet es sich an SSH auf dem Zielsytem noch zusätzlich zu härten und dafür zu sorgen, dass man nur noch mit Schlüsselpaar und nicht mehr mit Username/Passwort einloggen kann.

Dazu ändert man folgenden Parameter in der /etc/ssh/sshd_config des Zielsystems:

PasswordAuthentication no

Dies ist natürlich nur sinnvoll, wenn alle Benutzer die sich über ssh einloggen müssen ein gültiges Schlüsselpaar besitzen.

 

Comments

New comment

Name *
E-Mail *
Comment
Spam protection *
Spam protection Reload
Please write the text from the spam protection image to the field below