Implementierung der SSH-Schlüsselauthentifizierung unter Linux

SSH (Secured Shell) ist ein Protokoll, das eine kryptographisch gesicherte Verbindung zwischen dem SSH-Client und entfernten Servern herstellt.

Mit SSH können Sie entfernte Server sicher verwalten und administrieren. Dies kann in vielerlei Hinsicht hilfreich sein.

  • Einsatz mehrerer Server
  • Dienste aus der Ferne stoppen/starten
  • Automatisierung

und Ihre ganze Kreativität (hoffentlich)…

Als Systemadministrator sollten Sie diese grundlegenden Dinge wissen.

Lassen Sie uns lernen, wie…

Ich werde einen privaten Schlüssel und einen öffentlichen Schlüssel erzeugen. Der private Schlüssel sollte auf dem Rechner Ihres ssh-Clients gespeichert werden und muss sicher aufbewahrt werden. Der öffentliche Schlüssel muss auf den entfernten Server kopiert werden, damit Sie sich vom SSH-Client-Rechner aus bei diesem Server anmelden können, ohne ein Passwort eingeben zu müssen.

Sie werden Folgendes lernen.

  • SSH installieren (nicht erforderlich, wenn bereits installiert)
  • SSH-Schlüssel generieren
  • SSH-Schlüssel auf einen entfernten Server kopieren
  • Sich mit SSH auf dem entfernten Server anmelden

Zu Demonstrationszwecken habe ich 2 Server mit den unten angegebenen IP-Adressen. Ein System ist ein Client und der andere ist ein Server, auf dem ich mich über SSH von einem Client-Rechner aus anmelden werde.

  • Client (Benutzer -> geekflare) : 192.168.56.102
  • Remote (Benutzer -> ubuntu) : 192.168.56.101

SSH installieren

Bevor Sie die in diesem Artikel beschriebenen Schritte ausführen, stellen Sie sicher, dass openssh-server auf den Servern installiert ist. Wenn er nicht installiert ist, führen Sie die folgenden Befehle aus, um ihn zu installieren.

sudo apt-get install openssh-server

sudo systemctl enable ssh

sudo systemctl start ssh

Sie können den Befehl ssh ausführen, um zu überprüfen, ob er auf dem System installiert ist oder nicht.

geekflare@geekflare:~$ ssh

verwendung: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]

           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]

           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]

           [-i identity_file] [-J [user@]host[:port]] [-L Adresse]

           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]

           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]

           [-w local_tun[:remote_tun]] Ziel [Befehl]

SSH-Schlüssel generieren

Dies muss auf einem Client-Server durchgeführt werden.

Führen Sie den Befehl ssh-keygen aus, um einen SSH-Schlüssel zu erzeugen. Drücken Sie einfach die Eingabetaste, wenn er nach der Datei, der Passphrase und der gleichen Passphrase fragt. Standardmäßig wird ein Schlüsselpaar im Verzeichnis ~/.ssh erzeugt. Id_rsa ist der private Schlüssel und id_rsa.pub ist der zugehörige öffentliche Schlüssel.

geekflare@geekflare:~$ ssh-keygen

Erzeugt ein öffentliches/privates rsa-Schlüsselpaar.

Geben Sie die Datei an, in der der Schlüssel gespeichert werden soll (/home/geekflare/.ssh/id_rsa):

Geben Sie die Passphrase ein (leer für keine Passphrase):

Geben Sie dieselbe Passphrase erneut ein:

Ihre Identifikation wurde in /home/geekflare/.ssh/id_rsa gespeichert.

Ihr öffentlicher Schlüssel wurde in /home/geekflare/.ssh/id_rsa.pub gespeichert.

Der Fingerabdruck des Schlüssels lautet:

SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 geekflare@geekflare

Das Randomart-Bild des Schlüssels ist:

 ---[RSA 2048]---- 

|o ..             |

| o |

|oo. . . o |

|.. *     . *     |

| B .   S . o. |

| O o . . . . ... .|

| @ o o . E=. o |

| B o .o.= . |

| ... o. oo |

 ----[SHA256]----- 

Es werden zwei neue Dateien im Verzeichnis ~/.ssh erzeugt.

SSH-Schlüssel auf den entfernten Server kopieren

Kopieren Sie den privaten Schlüssel in den Ordner ~/.ssh auf einen entfernten Server. Auf den meisten Servern sollte dieser Ordner bereits vorhanden sein, andernfalls müssen Sie einen Ordner erstellen.

Und das geht so:

  • Melden Sie sich auf dem entfernten Server mit dem Benutzer an, mit dem Sie verbunden werden möchten. In meinem Fall ist es ubuntu
  • Vergewissern Sie sich, dass das aktuelle Arbeitsverzeichnis das Heimatverzeichnis des Benutzers ist und erstellen Sie dann einen .ssh-Ordner. Sie können auch den folgenden Befehl verwenden, um einen solchen zu erstellen
mkdir -p ~/.ssh

Wenn Sie bereits einen .ssh-Ordner haben, erstellen Sie eine Sicherungskopie davon.

Als Nächstes werden wir den öffentlichen Schlüssel von einem Client-Server aus übertragen.

Führen Sie auf dem Client-Rechner (192.168.56.102) den folgenden Befehl aus, um den öffentlichen Schlüssel auf den Remote-Server in eine authorized_keys-Datei im Verzeichnis .ssh zu kopieren.

geekflare@geekflare:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'

ubuntu@192.168.56.101's password:

Führen Sie den folgenden Befehl aus, um die Berechtigungen für die Datei authorized_keys auf dem Remote-Server festzulegen.

geekflare@geekflare:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

Großartig, damit ist der Schlüssel ausgetauscht und die Berechtigungen sind eingerichtet.

Anmeldung beim Remote Server über SSH

Lassen Sie uns testen, ob es funktioniert!

Melden Sie sich von einem Client-Rechner (192.168.56.102) als geekflare-Benutzer beim Remote-Server (192.168.56.101) an.

Führen Sie zum Testen den folgenden Befehl aus, der diesmal nicht nach dem Passwort fragt.

geekflare@geekflare:~$ ssh ubuntu@192.168.56.101

Willkommen bei Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)

 * Dokumentation: https://help.ubuntu.com

 * Verwaltung: https://landscape.canonical.com

 * Unterstützung: https://ubuntu.com/advantage

346 Pakete können aktualisiert werden.

11 Aktualisierungen sind Sicherheitsaktualisierungen.

Letzte Anmeldung: Mon Jun 17 00:10:32 2019 von 192.168.56.101

Hier ist es…

Ich habe mich erfolgreich bei einem entfernten Server angemeldet. Wenn Sie den folgenden Befehl ausführen, erhalten Sie die IP-Details des entfernten Rechners.

ubuntu@ubuntu:~$ ifconfig

enp0s3 Link encap:Ethernet HWaddr 08:00:27:9b:47:86 

          inet addr:10.0.2.15 Bcast:10.0.2.255 Maske:255.255.255.0

          inet6 adr: fe80::5c62:3267:b752:fe5d/64 Bereich:Link

          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

          RX-Pakete:20239 Fehler:0 verworfen:0 Überläufe:0 Rahmen:0

          TX-Pakete:5406 Fehler:0 verworfen:0 Überläufe:0 Träger:0

          kollisionen:0 txqueuelen:1000

          RX-Bytes:22678039 (22.6 MB) TX-Bytes:701710 (701.7 KB)

enp0s8 Link encap:Ethernet HWaddr 08:00:27:a9:4a:6b 

          inet addr:192.168.56.101 Bcast:192.168.56.255 Maske:255.255.255.0

          inet6 adr: fe80::54a9:761c:9034:21a2/64 Bereich:Link

          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

          RX-Pakete:330 Fehler:0 verworfen:0 Überläufe:0 Rahmen:0

          TX-Pakete:197 Fehler:0 fallengelassen:0 Überläufe:0 Träger:0

          kollisionen:0 txqueuelen:1000

          RX-Bytes:42847 (42.8 KB) TX-Bytes:32774 (32.7 KB)

lo Link encap:Lokaler Loopback 

          inet adr:127.0.0.1 Maske:255.0.0.0

          inet6 adr: ::1/128 Bereich:Host

          UP LOOPBACK RUNNING MTU:65536 Metric:1

          RX-Pakete:997 Fehler:0 verworfen:0 Überläufe:0 Rahmen:0

          TX-Pakete:997 Fehler:0 verworfen:0 Überläufe:0 Träger:0

          kollisionen:0 txqueuelen:1

          RX-Bytes:79654 (79.6 KB) TX-Bytes:79654 (79.6 KB)

Fazit

Die Einrichtung des SSH-Schlüsselaustauschs ist sehr einfach, wie Sie sehen können. Ich hoffe, das hilft Ihnen und wenn Sie sich für Linux-Administration und Fehlerbehebung interessieren, dann schauen Sie sich diesen Udemy-Kurs an.