GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So konfigurieren Sie die SSH-Schlüssel-basierte Authentifizierung in Linux

Dieses Handbuch erklärt, was SSH-Schlüssel-basierte Authentifizierung ist, Arten von SSH-Authentifizierungsmethoden und schließlich, wie man SSH-Schlüssel-basierte Authentifizierung in Linux- und Unix-ähnlichen Betriebssystemen konfiguriert.

Was ist SSH-Schlüssel-basierte Authentifizierung?

Wie wir alle wissen, Secure Shell , kurz SSH , ist das kryptografische Netzwerkprotokoll, mit dem Sie über ein ungesichertes Netzwerk, z. B. das Internet, sicher mit einem Remote-System kommunizieren/auf dieses zugreifen können.

Wann immer Sie Daten über ein ungesichertes Netzwerk mit SSH senden, werden die Daten automatisch im Quellsystem verschlüsselt und auf der Zielseite entschlüsselt.

SSH bietet vier Authentifizierungsmethoden, nämlich passwortbasierte Authentifizierungschlüsselbasierte Authentifizierung ,hostbasierte Authentifizierung , undTastaturauthentifizierung .

Die am häufigsten verwendeten Authentifizierungsmethoden sind passwortbasierte und schlüsselbasierte Authentifizierung.

Bei der passwortbasierten Authentifizierung benötigen Sie lediglich das Passwort des Benutzers des Remote-Systems. Wenn Sie das Passwort des Remote-Benutzers kennen, können Sie mit "ssh [email protected]" auf das jeweilige System zugreifen Befehl.

Andererseits müssen Sie bei der schlüsselbasierten Authentifizierung SSH-Schlüsselpaare generieren und den öffentlichen SSH-Schlüssel auf das Remote-System hochladen, um ihn über SSH zu kommunizieren.

Jedes SSH-Schlüsselpaar besteht aus einem privaten Schlüssel und einem öffentlichen Schlüssel. Der private Schlüssel sollte innerhalb des Client-Systems aufbewahrt werden und der öffentliche Schlüssel sollte auf die Remote-Systeme hochgeladen werden. Sie sollten den privaten Schlüssel an niemanden weitergeben .

Ich hoffe, Sie haben die Grundidee über SSH und seine Authentifizierungsmethoden verstanden. Lassen Sie uns nun die SSH-Schlüssel-basierte Authentifizierung in Linux konfigurieren.

SSH-schlüsselbasierte Authentifizierung in Linux konfigurieren

Für die Zwecke dieses Handbuchs werde ich das Arch Linux-System als lokales System und Ubuntu 18.04 LTS als Remote-System verwenden.

Lokale Systemdetails:

  • Betriebssystem :Arch Linux Desktop
  • IP-Adresse :192.168.225.37 /24

Details des entfernten Systems:

  • Betriebssystem :Ubuntu 18.04 LTS-Server
  • IP-Adresse :192.168.225.22/24

SSH-Schlüsselpaar generieren

Wie bereits erwähnt, sollte bei der SSH-Schlüssel-basierten Authentifizierungsmethode der öffentliche Schlüssel auf das entfernte System hochgeladen werden, auf das Sie über SSH zugreifen möchten.

Die öffentlichen Schlüssel werden normalerweise in einer Datei namens ~/.ssh/authorized_keys gespeichert in den entfernten SSH-Systemen.

Wichtiger Hinweis: Generieren Sie keine Schlüsselpaare als root , da nur root diese Schlüssel verwenden könnte. Erstellen Sie Schlüsselpaare als normaler Benutzer.

Lassen Sie uns nun das SSH-Schlüsselpaar im lokalen System erstellen. Führen Sie dazu den folgenden Befehl in Ihrem lokalen Clientsystem aus.

$ ssh-keygen

Der obige Befehl erstellt ein 2048-Bit-RSA-Schlüsselpaar. Geben Sie die Passphrase zweimal ein. Noch wichtiger ist, dass Sie sich Ihre Passphrase merken. Du wirst es später brauchen.

Beispielausgabe:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sk/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/sk/.ssh/id_rsa.
Your public key has been saved in /home/sk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+=+*= + |
|o.o=.* = |
|.oo * o + |
|. = + . o |
|. o + . S |
| . E . |
| + o |
| +.*o+o |
| .o*=OO+ |
+----[SHA256]-----+

Falls Sie das Schlüsselpaar bereits erstellt haben, sehen Sie die folgende Meldung. Geben Sie einfach "y" ein, um den vorhandenen Schlüssel zu überschreiben .

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

Hinweis:

Bitte beachten Sie, dass die Passphrase optional ist . Wenn Sie eines angeben, werden Sie jedes Mal aufgefordert, das Passwort einzugeben, wenn Sie versuchen, eine SSH-Verbindung zu einem entfernten System herzustellen, es sei denn, Sie verwenden einen SSH-Agenten zum Speichern des Passworts.

Wenn Sie keine Passphrase wünschen (allerdings nicht sicher), drücken Sie einfach zweimal die EINGABETASTE, wenn Sie zur Eingabe der Passphrase aufgefordert werden. Ich empfehle Ihnen jedoch, Passphrase zu verwenden.

Die Verwendung eines passwortlosen SSH-Schlüssels ist aus Sicherheitsgründen im Allgemeinen keine gute Idee. Sie sollten auf sehr spezifische Fälle beschränkt werden, wie z. B. Dienste, die ohne Benutzereingriff auf ein entferntes System zugreifen müssen (z. B. Remote-Backups mit rsync, unison, …).

Wenn Sie bereits einen SSH-Schlüssel ohne Passphrase in der privaten Datei ~/.ssh/id_rsa haben und den Schlüssel mit der Passphrase aktualisieren möchten, verwenden Sie den folgenden Befehl:

$ ssh-keygen -p -f ~/.ssh/id_rsa

Beispielausgabe:

Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Kopieren Sie den öffentlichen SSH-Schlüssel auf Remote-Systeme

Wir haben das Schlüsselpaar im lokalen System erstellt. Kopieren Sie als Nächstes den öffentlichen SSH-Schlüssel mit dem folgenden Befehl auf Ihren SSH-Remoteserver:

$ ssh-copy-id [email protected]

Hier kopiere ich den öffentlichen Schlüssel des lokalen Systems (Arch Linux) auf das Remote-System (in meinem Fall Ubuntu 18.04 LTS).

Technisch gesehen kopiert der obige Befehl den Inhalt des Schlüssels ~/.ssh/id_rsa.pub des lokalen Systems in ~/.ssh/authorized_keys des entfernten Systems Datei. Klar? Gut.

Geben Sie ja ein um die Verbindung zu Ihrem Remote-SSH-Server fortzusetzen, und geben Sie dann das sudo-Passwort (oder das Root-Benutzer-Passwort) des Remote-Systems ein.

/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
[email protected]'s password:

Number of key(s) added: 1

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

Wenn Sie den Schlüssel bereits kopiert haben, ihn aber mit einer neuen Passphrase aktualisieren möchten, verwenden Sie -f Option, um den vorhandenen Schlüssel wie unten zu überschreiben.

$ ssh-copy-id -f [email protected]

Wir haben den öffentlichen SSH-Schlüssel des lokalen Systems erfolgreich zum Remote-System hinzugefügt.

Wir können jetzt die passwortbasierte Authentifizierung im Remote-System vollständig deaktivieren. Weil wir die schlüsselbasierte Authentifizierung bereits konfiguriert haben, brauchen wir also keine passwortbasierte Authentifizierung mehr.

Passwortbasierte SSH-Authentifizierung im Remote-System deaktivieren

Sie müssen die folgenden Befehle als root- oder sudo-Benutzer ausführen.

Um die passwortbasierte Authentifizierung zu deaktivieren, gehen Sie zur Konsole Ihres Remote-Systems und bearbeiten Sie /etc/ssh/sshd_config Konfigurationsdatei mit einem beliebigen Editor:

$ sudo vi /etc/ssh/sshd_config

Finden Sie die folgende Zeile. Kommentieren Sie es aus und setzen Sie seinen Wert auf no .

PasswordAuthentication no

Starten Sie den ssh-Dienst neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart sshd

Zugriff auf Remote-System vom lokalen System

Gehen Sie zu Ihrem lokalen System und SSH in Ihren Remote-Server mit dem Befehl:

$ ssh [email protected]

Geben Sie die Passphrase ein, um sich beim Remote-System anzumelden.

Beispielausgabe:

Enter passphrase for key '/home/sk/.ssh/id_rsa': 
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
[email protected]:~$

Wie Sie bemerkt haben, haben wir uns mit der Passphrase, die wir zuvor mit ssh-keygen erstellt haben, beim Konto des Remote-Systems angemeldet Befehl, ohne das tatsächliche Passwort des Benutzerkontos zu verwenden.

Wenn Sie versuchen, ssh von einem anderen Client-System aus auszuführen, erhalten Sie diese Fehlermeldung. Angenommen, ich habe versucht, von meinem CentOS aus mit dem Befehl:

eine SSH-Verbindung zu meinem Ubuntu-System herzustellen
$ ssh [email protected]

Beispielausgabe:

The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts.
Permission denied (publickey).

Wie Sie in der obigen Ausgabe sehen, durfte ich von anderen Systemen aus keine SSH-Verbindung zu meinen entfernten Ubuntu 18.04-Systemen herstellen.

Hinzufügen weiterer Client-Systemschlüssel zum SSH-Server

Dies ist sehr wichtig. Wie ich bereits sagte, können Sie nicht über SSH auf das Remote-System zugreifen, außer auf das, das Sie konfiguriert haben (in unserem Fall ist es Ubuntu).

Ich möchte mehr Clients Berechtigungen für den Zugriff auf den Remote-SSH-Server erteilen. Was sollte ich tun? Einfach. Sie müssen das SSH-Schlüsselpaar in allen Ihren Client-Systemen generieren und den öffentlichen SSH-Schlüssel manuell auf den Remote-Server kopieren, auf den Sie über SSH zugreifen möchten.

Um ein SSH-Schlüsselpaar auf Ihren Client-Systemen zu erstellen, führen Sie Folgendes aus:

$ ssh-keygen

Geben Sie die Passphrase zweimal ein. Nachdem das Schlüsselpaar generiert wurde, kopieren Sie den öffentlichen SSH-Schlüssel (nicht den privaten Schlüssel) manuell auf Ihren Remote-Server.

Zeigen Sie den Pub-Schlüssel mit dem Befehl:

an
$ cat ~/.ssh/id_rsa.pub

Sie sollten eine Ausgabe wie unten sehen.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 [email protected]

Kopieren Sie den gesamten Inhalt (über ein USB-Laufwerk oder ein beliebiges Medium) und gehen Sie zur Konsole Ihres Remote-Servers. Erstellen Sie ein Verzeichnis namens ssh im Home-Verzeichnis, wie unten gezeigt.

$ mkdir -p ~/.ssh

Fügen Sie als Nächstes den Pub-Schlüssel Ihres Client-Systems, den Sie im vorherigen Schritt generiert haben, in einer Datei mit dem Namen "~/.ssh/authorized_keys" an :

echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys

Starten Sie den ssh-Dienst auf dem Remote-System neu. Jetzt können Sie vom neuen Client aus eine SSH-Verbindung zu Ihrem Server herstellen.

Wenn das manuelle Hinzufügen von ssh-Pubkey schwierig erscheint, aktivieren Sie vorübergehend die passwortbasierte Authentifizierung im Remote-System und kopieren Sie den Schlüssel mit dem Befehl „ssh-copy-id“ von Ihrem lokalen System und deaktivieren Sie schließlich die passwortbasierte Authentifizierung.

Verwandte Lektüre:

  • So richten Sie die Multi-Faktor-Authentifizierung für SSH unter Linux ein
  • Feststellen, ob ein Benutzer passwortbasierte oder schlüsselbasierte SSH-Authentifizierung verwendet
  • SSLH – Verwenden Sie denselben Port für HTTPS und SSH
  • ScanSSH – Schneller SSH-Server und offener Proxy-Scanner

Schlussfolgerung

Die auf SSH-Schlüsseln basierende Authentifizierung bietet einen zusätzlichen Schutz vor Brute-Force-Angriffen. Wie Sie sehen können, ist die Konfiguration der schlüsselbasierten Authentifizierung auch nicht so schwierig. Dies ist eine der empfohlenen Methoden, um Ihre Linux-Server sicher und geschützt zu halten.


Linux
  1. So generieren Sie einen SSH-Schlüssel in Windows 10

  2. So konfigurieren Sie SSH-Schlüssel mit cPanel

  3. So ändern Sie den SSH-Port unter Linux

  4. Konfigurieren Sie SSH-Schlüssel auf einem Debian 9-System – wie geht das?

  5. Wie passwortloses SSH unter Linux / UNIX funktioniert

So richten Sie den öffentlichen und privaten SSH-Schlüssel unter Linux ein

So richten Sie SSH-Schlüssel unter Debian 11 Linux ein

Wie generiert und verwendet man einen SSH-Schlüssel in einem Linux-System?

wie man die SSH-Schlüssel-basierte Authentifizierung in Linux VPS oder Dedicated Server konfiguriert

So deaktivieren Sie die Überprüfung des SSH-Hostschlüssels in Linux

So installieren, konfigurieren und aktivieren Sie den SSH-Dienst unter Linux