Root-Server Tutorial

ROOT-SERVER TUTORIAL

Login mit SSH-Key anstatt Passwort

Wie du die Autorisierung per SSH-Key auf deinem Server konfigurierst.

Autor:

Florian Gareis

Übersetzt von:

derrobin154

Letztes Update:

5.10.2022

Einführung

Deutsche Übersetzung durch derrobin154

In diesem Tutorial sehen wir uns an, wie du anstatt der schwächeren Passwortmethode einen sichereren SSH-Key für die Anmeldung auf deinem Server verwenden kannst.

Voraussetzungen

  • Server (Root oder VPS)
  • PC oder Laptop mit Linux / Windows (WSL)

Schritt 1 - SSH-Key generieren

Für diese Anleitung gehen wir davon aus, dass du ein Linux-Betriebssystem verwendest (Windows-User können WSL verwenden).

Zunächst müssen wir ein SSH-Schlüsselpaar erzeugen, mit dem wir uns später bei unserem Server anmelden können. Dafür führen wir folgenden Befehl aus:

ssh-keygen

Dieser Befehl erzeugt standardmäßig einen Schlüssel mit einer 2048-Bit-RSA-Verschlüsselung. Wenn du mehr Sicherheit möchtest, kannst du dem Befehl auch das Flag -b 4096 hinzufügen, um den Schlüssel mit einer 4096-Bit-RSA-Verschlüsselung zu erzeugen. Nun musst du festlegen, wo der Schlüssel gespeichert werden soll. Die Standardeinstellung ist ~/.ssh/id_rsa (wobei ~ auf den Heimatordner deines Benutzers unter Linux verweist). Dann fordert dich das Skript auf, ein Passwort einzugeben, welches verhindert, dass der Schlüssel ohne Passwort verwendet werden kann. Wenn du diesen Schlüssel nicht mit einem Passwort schützen willst, drücke einfach Enter (nicht empfohlen).

Wenn der Schlüssel erfolgreich erzeugt wurde, sollte der Output wie folgt aussehen:

Your identification has been saved in ~/.ssh/id_rsa
Your public key has been saved in ~/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:G+UCCe2r45jt7az1cTVEZj4R1/B8U7eAMNmw0DsAOA username@host
The key's randomart image is:
+---[RSA 3072]----+
|   .oo. oo+oB=oo |
|  .  ..o . @=o+oo|
|   E .o o + =o o+|
|      .. + . .  .|
|       .S . o    |
|      .  + . .   |
|     .. o .      |
|   +o+ . o       |
|  oo=++ .        |
+----[SHA256]-----+

Schritt 2 - Public Key auf den Server kopieren

Schritt 2.1 - Benutze ssh-copy-id

Wir haben jetzt einen privaten und einen öffentlichen Schlüssel auf unserem Computer. Nun müssen wir den öffentlichen Schlüssel auf unseren Server übertragen. Dazu können wir die Funktion ssh-copy-id unseres Linux-Betriebssystems verwenden.

Benutze folgenden Befehl:

ssh-copy-id username@host

Beispiel:

ssh-copy-id maxmusterman@37.34.15.3

37.34.15.3 ist die IP des Servers.

Bei der ersten Verbindung zum Server fragt das System, ob es dem Fingerabdruck des Server-Schlüssels vertrauen soll:

The authenticity of host '37.34.15.3 (37.34.15.3)' can't be established.
ECDSA key fingerprint is fd:fd:d5:f9:88:fe:73:84:e1:55:00:ab:d6:6f:22:fe.
Are you sure you want to continue connecting (yes/no)?

Wenn du yes eingibst, verbindet sich das Skript mit dem Server:

/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
maxmusterman@37.34.15.3's password:

Als nächstes gibst du das Passwort deines Benutzers auf dem Server ein. Wenn die Verbindung erfolgreich war, kopiert das Skript den öffentlichen Schlüssel in den Ordner ~/.ssh des Benutzerkontos:

Number of key(s) added: 1

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

Schritt 2.2 - Manuelles Kopieren des Keys

Wenn ssh-copy-id auf deinem System nicht verfügbar ist, kannst du dich auch über SSH mit deinem Server verbinden und den Schlüssel dann manuell kopieren. Um den Inhalt des Schlüssels abzurufen, führe den folgenden Befehl auf deinem lokalen Rechner aus:

cat ~/.ssh/id_rsa.pub

Der Output müsste wie folgt aussehen:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAuEmfbUGlpPtjpxZU7jcLmmgQ5OAsfPumzvadL4qjLhv3FFbpanQpsSlCfE8kDvWqCkHRhXm29TpjtGLU0mJisg3dz9zHkoG1LoRTnPACmmzjW3Ca+MX56cgWKRFB/d2QN9riPCkRfvFCBgeHlZIa5hGlmbcu+uJNfTu/1vDjlhnyWMB9gxuesOPEB08YT64Ro84ACPAIdfFC4RJICilO+L9FgeYjKwi9jUvYOL3Ywhgs/DkC+EvTkZGyUL8cX8ITkFjLpVh7c/8KkFZCB6DQe1CJQKo8Y5TUM2wit0UlrsrO2AhnlfXXTtIOELQ3ygug6YI1CPaqGpLPbzlM1hfnros5S2UJB6OmiDM17YuyMdbQj2O5HyDUTEtGzgfKt/IG3Na6wFSGEOZhY4TIV9Z6FwXvJ+F4GK4srMgq/HJAIthbRP3x30K29Sfb8edgzDtaJbR38vrIjGUAVbr+mSqVZ1yeithXjuQ9hVOc1GaCxaMuVAw/CHtwdnq100= username@host

Kopiere nun diesen Schlüssel (den gesamten Schlüssel, einschließlich des ssh-rsa-Teils und username@host am Ende) und verbinde dich über SSH mit deinem Server. Wenn du mit deinem entfernten Server verbunden bist, erstelle eine neue Datei im Ordner ~/.ssh mit dem Namen authorized_keys:

nano ~/.ssh/authorized_keys

Füge den zuvor kopierten Inhalt des öffentlichen Schlüssels in die Datei ein, speichere die Datei mit "Strg+O" und schließe sie anschließend mit "Strg+X".

Nun ist der Schlüssel nutzbar.

Schritt 3 - Schlüssel testen

Der letzte Schritt besteht darin, den Schlüssel zu testen. Melde dich daher von deinem Server ab, falls du noch angemeldet bist, und melde dich anschließend mit dem üblichen SSH-Befehl erneut an:

ssh username@host

Anstelle von Benutzername/Passwort wird nun der SSH-Key für die Anmeldung verwendet. Wenn du zuvor ein Passwort für die Schlüsseldatei festgelegt hast, musst du es eingeben, damit der Schlüssel funktioniert.

Schritt 4 - Passwort-Login deaktivieren (optional)

Um den gesamten Anmeldevorgang sicherer zu machen, kannst du die Passwortanmeldung generell deaktivieren und nur den SSH-Key verwenden. Dazu müssen wir unsere Datei sshd_config bearbeiten:

sudo nano /etc/ssh/sshd_config

Als nächstes müssen wir die folgende Option ändern:

- #PasswordAuthentication yes
+ PasswordAuthentication no

und den SSH-Dienst neu starten:

sudo systemctl restart ssh

Nun wird ausschließlich die SSH-Key-Anmeldung funktionieren.

Schlussfolgerung

Auf deinem Server sollte ein SSH-Key vorhanden sein, mit dem du dich anmelden kannst. Diese Methode ist wesentlich sicherer als die reguläre Passwortmethode und trägt zur Erhöhung der Serversicherheit bei.

License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicence, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Contributor's Certificate of Origin

By making a contribution to this project, I certify that:

  1. The contribution was created in whole or in part by me and I have the right to submit it under the license indicated in the file; or

  2. The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same license (unless I am permitted to submit under a different license), as indicated in the file; or

  3. The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.

  4. I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the license(s) involved.

Veröffentlicht am 5.10.2022 von Florian Gareis

Tutorial einreichen

Erhalte einen 60€ netcup Gutschein für jedes veröffentlichte Tutorial.