How-to: SSH Key-Basierte Authentifizierung auf dem Linux-Server und dem Linux-Client
Für die SSH Key-Basierte Authentifizierung mit Putty klicken Sie hier
Die Anweisungen sind für die drei wichtigsten Linux-Distributionsfamilien – Redhat/Fedora (CentOS), SUSE (OpenSUSE) und Debian (Ubuntu) – gleich:
Verwendete Programme bzw. Befehle:
ssh-keygen: Zur Generierung des RSA-Schlüssels
ssh-agent: Zur Zwischenspeicherung des privaten Schlüssels, um die Verwendung des privaten Schlüssels zu erleichtern
ssh-copy-id: Zum Kopieren des öffentlichen Schlüssels auf dem Remote-Server Schritt 1: Den Remoteserver vorbereiten
Schritt 1: Den Remoteserver vorbereiten
-
Öffnen Sie die Datei /etc/ssh/ssh/sshd_config und überprüfen Sie folgende Parameter:
1 2 3 4 |
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes |
Der Parameter PasswordAuthentication kann auf „no“ gesetzt werden, nachdem die Keybased Authentifizierung eingerichtet und erfolgreich getestet wurde.
-
Setzen Sie die entsprechenden Dateizugriffsrechte:
1 2 |
$ chmod 700 $HOME/.ssh $ chmod 600 $HOME/.ssh/authorized_keys |
Das ist erforderlich, wenn in /etc/ssh/ssh/sshd_config der Parameter StrictModes auf yes gesetzt ist. Dieser Parameter wird verwendet, um festzulegen, ob sshd die Berechtigungen des Home -Verzeichnisses überprüfen soll, bevor die SSH-Verbindung akzeptiert wird.
-
Wenn SELinux aktiviert ist, stellen Sie die standardmäßigen SELinux-Kontexte wieder her:
1 |
$ restorecon -R &HOME/.ssh |
-
Starten Sie den sshd-Dienst neu:
1 |
$ sudo systemctl restart sshd.service |
Schritt 2: Public und Private Keys erzeugen (auf dem Client Rechner)
-
Geben Sie den Typ, die Länge, den Namen und den Pfad der Keys ein. Wenn Sie eine Passphrase verwenden möchten, geben Sie diese ein. Andernfalls drücken Sie einfach die Enter-Taste
Anmerkung:
Es ist nicht notwendig, eine Passphrase anzugeben. Ich empfehle jedoch dringend, eine Passphrase zu verwenden. Dies ist eine zusätzliche Sicherheitsstufe. Falls der Private Key kompromittiert wird, kann er ohne die Passphrase nicht mehr verwendet werden.
Im folgenden Beispiel werde ich einen 2048-Bit-RSA-Schlüssel mit Standardnamen und Pfad erzeugen. Der Standardpfad lautet $HOME/.ssh.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/home/mazhar/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/mazhar/.ssh/id_rsa. Your public key has been saved in /home/mazhar/.ssh/id_rsa.pub. The key fingerprint is: 2c:f9:cd:56:9e:b6:72:34:c7:50:b2:39:0a:a9:ee:59 mazhar@centos7.homenetwork.maz The key's randomart image is: +--[ RSA 2048]----+ | | | . . | | . = | | oo = | | o.S. ..+ | | .o o.oo.o | | . E +.+o | | .o ..... | | .o o. | +-----------------+ |
Im obigen Beispiel ist id_rsa der Private Schlüssel (Private Key) und id_rsa.pub der öffentliche Schlüssel (Public Key).
Schritt 3: Den Public Key (id_rsa.pub) zur Liste der autorisierten Keys auf dem Remote-Server hinzufügen
-
Standardmäßig werden die autorisierten Keys in &HOME/.ssh/authorized_keys gespeichert. Wenn die Datei &HOME/.ssh/authorized_keys auf dem Remote-Server nicht existiert, erstellen Sie sie.
-
Sie können den öffentlichen Schlüssel manuell oder mit dem Befehl ssh-copy-id kopieren. Nachfolgend ist das Beispiel ssh-copy-id aufgeführt:
1 2 3 4 5 6 7 8 9 |
$ ssh-copy-id mazhar@192.168.2.109 /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 mazhar@192.168.2.109's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'mazhar@192.168.2.109'" and check to make sure that only the key(s) you wanted were added. |
Schritt 4: Den ssh-agent starten und den privaten Schlüssel zum SSH -Agent hinzufügen
1 2 |
$ eval $(ssh-agent) Agent pid 7220 |
1 2 3 |
$ ssh-add $HOME/.ssh/id_rsa Enter passphrase for /home/mazhar/.ssh/id_rsa: Identity added: /home/mazhar/.ssh/id_rsa (/home/mazhar/.ssh/id_rsa) |
Anmerkung: Wieso „eval“?
Wenn man nur ssh-agent eintippt, gibt das Programm die Umgebungsvariablen aus, die für die Verbindung mit dem ssh-agent erforderlich sind. z.B.
1 2 3 4 |
$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-POflfAnDHuyb/agent.16266; export SSH_AUTH_SOCK; SSH_AGENT_PID=16267; export SSH_AGENT_PID; echo Agent pid 16267; |
Durch den Aufruf von „eval“ werden diese Umgebungsvariablen sofort in die Umgebung geladen.
Schritt 5: Schlüssel-basierte Authentifizierung auf Funktionstüchtigkeit überprüfen
1 2 3 4 |
ssh mazhar@192.168.2.109 Enter passphrase for key '/home/mazhar/.ssh/id_rsa': Last login: Wed Dec 26 15:49:24 2018 from homecentos7 [mazhar@centos7 ~]$ |
Anmerkung: Wenn ich keine Passphrase verwendet hätte, wäre ich direkt angemeldet gewesen, ohne nach der Passphrase gefragt zu werden.
Schritt 6: die Passwort-Authentifizierung auf dem Remote-Server deaktivieren (dringend empfohlen)
Öffnen Sie die Datei /etc/ssh/ssh/sshd_config und überprüfen Sie folgende Parameter:
1 |
PasswordAuthentication no |
1 Comment