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 Ihrem ssh-Client-Rechner 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 dass ein Passwort erforderlich ist.
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 aufgeführten IP-Adressen, ein System ist ein Client und der andere 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
Installieren von SSH
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
usage: 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 address]
[-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]] destination [command]
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 Sie nach der Datei, der Passphrase und derselben Passphrase gefragt werden. 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 ö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, wenn keine Passphrase vorhanden ist):
Geben Sie dieselbe Passphrase erneut ein:
Ihre Identifikation wurde in /home/geekflare/.ssh/id_rsa.
Ihr öffentlicher Schlüssel wurde in /home/geekflare/.ssh/id_rsa.pub gespeichert.
Der Fingerabdruck des Schlüssels lautet:
SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 geekflare@geekflare
Das Zufallsbild des Schlüssels lautet:
---[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 so gehen Sie vor
- 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'
Das Passwort von ubuntu@192.168.56.101
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, der Schlüssel ist ausgetauscht und die Berechtigungen sind alle gesetzt.
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
* Support: https://ubuntu.com/advantage
346 Pakete können aktualisiert werden.
11 Updates sind Sicherheitsupdates.
Letzte Anmeldung: Mon Jun 17 00:10:32 2019 von 192.168.56.101
Hier ist es...
Ich habe mich erfolgreich beim Remote-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 Mask:255.255.255.0
inet6 addr: fe80::5c62:3267:b752:fe5d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX Pakete:20239 Fehler:0 dropped:0 overruns:0 frame:0
TX Pakete:5406 errors:0 dropped:0 overruns:0 carrier:0
collisions: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 Mask:255.255.255.0
inet6 addr: fe80::54a9:761c:9034:21a2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX Pakete:330 errors:0 dropped:0 overruns:0 frame:0
TX packets:197 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:42847 (42.8 KB) TX-Bytes:32774 (32.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:997 errors:0 dropped:0 overruns:0 frame:0
TX packets:997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:79654 (79.6 KB) TX-Bytes:79654 (79.6 KB)
Schlussfolgerung
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.
-
Avi ist ein Technik-Enthusiast mit Fachkenntnissen in Trendtechnologien wie DevOps, Cloud Computing, Big Data und vielen mehr. Seine Leidenschaft ist es, Spitzentechnologien zu lernen und sein Wissen mit anderen zu teilen, indem er... mehr lesen