Verbindung zu einem Remote-Linux-Server über SSH herstellen

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab erwerben Sie die grundlegenden Fähigkeiten zur Verbindung und Verwaltung eines Remote-Linux-Servers über das Secure Shell (SSH) Protokoll. Sie beginnen mit der Einrichtung der Remote-Umgebung, was die Installation und Konfiguration des OpenSSH-Server-Pakets umfasst. Nachdem Sie sichergestellt haben, dass der Server bereit für Verbindungen ist, lernen Sie, wie Sie seine IP-Adresse ermitteln – ein entscheidender Schritt, um eine Verbindung von einem Client-Rechner aus aufzubauen.

Sobald der Server konfiguriert ist, werden Sie zwei Hauptmethoden der Remote-Interaktion via SSH praktizieren. Zuerst bauen Sie eine vollständig interaktive Shell-Sitzung auf, die Ihnen den kompletten Zugriff auf die Kommandozeile des entfernten Rechners ermöglicht. Danach lernen Sie, wie Sie einen einzelnen, spezifischen Befehl auf dem Remote-Server ausführen, ohne eine vollständige interaktive Sitzung zu starten. Diese Technik ist äußerst effektiv für Skripting- und Automatisierungsaufgaben.

OpenSSH-Server installieren und konfigurieren

In diesem Schritt installieren Sie das OpenSSH-Server-Paket, das es Ihrem System ermöglicht, eingehende SSH-Verbindungen zu akzeptieren. SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll, um Netzwerkdienste sicher über ein unsicheres Netzwerk zu betreiben. Das Paket openssh-server enthält die Kernkomponenten für das Hosting eines SSH-Servers.

Zunächst ist es ratsam, die Paketliste Ihres Systems zu aktualisieren, um sicherzustellen, dass Sie die neueste Version der Software erhalten. Der Benutzer labex verfügt über sudo-Berechtigungen, die für die systemweite Paketverwaltung erforderlich sind.

Führen Sie den folgenden Befehl aus, um den Paketindex zu aktualisieren:

sudo apt-get update

Sie sehen eine Ausgabe ähnlich der folgenden, die anzeigt, dass die Paketlisten aus den Repositories abgerufen werden:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Fetched 1,845 kB in 2s (1,040 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up-to-date.

Nun können Sie das Paket openssh-server mit apt-get installieren. Das Flag -y beantwortet alle Abfragen automatisch mit „Ja“, wodurch die Installation nicht-interaktiv erfolgt.

sudo apt-get install -y openssh-server

Nach Abschluss des Befehls sollten Sie eine Ausgabe sehen, die die Installation und Einrichtung von openssh-server und dessen Abhängigkeiten bestätigt:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  ncurses-term openssh-sftp-server ssh-import-id
...
Setting up openssh-server (1:8.9p1-3ubuntu0.1) ...
...
Creating SSH2 ECDSA key; this may take some time ...
Creating SSH2 ED25519 key; this may take some time ...
...

Der OpenSSH-Server-Dienst namens sshd sollte nach der Installation automatisch starten. Sie können seinen Status mit dem Befehl systemctl überprüfen, einem Werkzeug zur Steuerung des systemd-System- und Dienstmanagers.

Überprüfen Sie den Status des SSH-Dienstes:

sudo systemctl status ssh

Die Ausgabe sollte zeigen, dass der Dienst active (running) ist. Dies bestätigt, dass der SSH-Server bereit ist, Verbindungen anzunehmen.

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-30 10:30:00 UTC; 5s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1234 (sshd)
      Tasks: 1 (limit: 4617)
     Memory: 1.2M
        CPU: 8ms
     CGroup: /system.slice/ssh.service
             └─1234 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

...

Drücken Sie die Taste q auf Ihrer Tastatur, um die Statusansicht zu verlassen und zur Eingabeaufforderung zurückzukehren.

Hervorragend! Der OpenSSH-Server ist nun installiert und läuft auf Ihrem System. Im nächsten Schritt erstellen Sie einen neuen Benutzer für die SSH-Demonstration und lernen dann, wie Sie die IP-Adresse des Servers finden und sich mit ihm verbinden.

Neuen Benutzer für die SSH-Demonstration erstellen

In diesem Schritt erstellen Sie ein neues Benutzerkonto, das für SSH-Verbindungen verwendet wird. Da der Standardbenutzer labex zwar sudo-Rechte hat, wir aber sein Passwort für die SSH-Authentifizierung nicht kennen, müssen wir für diese Demonstration einen dedizierten Benutzer mit einem bekannten Passwort erstellen.

Erstellen Sie zunächst einen neuen Benutzer namens sshuser mit dem Befehl adduser. Dieser Befehl legt das Benutzerkonto an und fordert Sie auf, ein Passwort und weitere Details einzurichten.

sudo adduser sshuser

Sie werden aufgefordert, ein Passwort für den neuen Benutzer einzugeben und zu bestätigen. Verwenden Sie für dieses Lab password123 als Passwort. Sie werden auch nach zusätzlichen Informationen wie dem vollständigen Namen, der Zimmernummer usw. gefragt, aber Sie können diese Felder einfach mit der Eingabetaste überspringen.

Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

Überprüfen Sie nun, ob der Benutzer erfolgreich erstellt wurde, indem Sie die Datei /etc/passwd kontrollieren:

grep sshuser /etc/passwd

Sie sollten eine Ausgabe ähnlich dieser sehen:

sshuser:x:1000:1000:,,,:/home/sshuser:/bin/bash

Dies bestätigt, dass das Konto sshuser mit einem Home-Verzeichnis unter /home/sshuser erstellt wurde und die Bash-Shell verwendet. Die genauen Nummern für UID (User ID) und GID (Group ID) können je nach bereits vorhandenen Benutzern auf dem System variieren.

Sie können auch überprüfen, ob das Home-Verzeichnis des Benutzers erstellt wurde. Beachten Sie, dass Sie sudo-Rechte benötigen, um auf das Home-Verzeichnis eines anderen Benutzers zuzugreifen:

sudo ls -la /home/sshuser

Die Ausgabe sollte den Inhalt des Home-Verzeichnisses des Benutzers zeigen:

total 20
drwxr-x--- 2 sshuser sshuser 4096 Jun 30 09:26 .
drwxr-xr-x 5 root    root    4096 Jun 30 09:26 ..
-rw-r--r-- 1 sshuser sshuser  220 Jun 30 09:26 .bash_logout
-rw-r--r-- 1 sshuser sshuser 3771 Jun 30 09:26 .bashrc
-rw-r--r-- 1 sshuser sshuser  807 Jun 30 09:26 .profile

Beachten Sie, dass das Home-Verzeichnis eingeschränkte Berechtigungen hat (drwxr-x---), was bedeutet, dass nur der Besitzer (sshuser) und Benutzer in derselben Gruppe darauf zugreifen können. Deshalb ist sudo erforderlich, um den Inhalt aufzulisten.

Perfekt! Sie haben nun ein Benutzerkonto sshuser mit dem Passwort password123, das Sie in den folgenden Schritten für SSH-Verbindungen verwenden können.

IP-Adresse des SSH-Servers ermitteln

In diesem Schritt lernen Sie, wie Sie die IP-Adresse Ihres SSH-Servers finden. Eine IP-Adresse ist eine eindeutige numerische Kennung, die jedem Gerät in einem Computernetzwerk zugewiesen wird, das das Internetprotokoll zur Kommunikation nutzt. Um eine SSH-Verbindung aufzubauen, muss der Client-Rechner die IP-Adresse des Servers kennen, mit dem er sich verbinden möchte.

In einem typischen Szenario mit zwei separaten Rechnern würden Sie diese IP-Adresse verwenden, um sich vom Client aus zu verbinden. In diesem Lab arbeiten Sie jedoch auf einer einzigen virtuellen Maschine, die sowohl als SSH-Server als auch als SSH-Client fungiert. Um sich mit dem SSH-Server auf Ihrem eigenen Rechner zu verbinden, können Sie eine spezielle IP-Adresse verwenden: 127.0.0.1, auch bekannt als localhost. Diese Adresse bezieht sich immer auf den lokalen Rechner selbst.

Dennoch ist es eine wichtige Fertigkeit zu wissen, wie man die nach außen gerichtete Netzwerk-IP-Adresse seines Rechners findet. Der moderne Befehl hierfür unter Linux ist ip.

Um Informationen über alle Netzwerkschnittstellen auf Ihrem System anzuzeigen, verwenden Sie den Befehl ip addr:

ip addr

Die Ausgabe listet alle Netzwerkschnittstellen auf, wie z. B. lo (die Loopback-Schnittstelle), eth0 (die primäre Ethernet-Schnittstelle) und möglicherweise docker0 (Docker-Bridge-Schnittstelle). Sie suchen nach dem inet-Eintrag unter Ihrer Hauptnetzwerkschnittstelle, die normalerweise eth0 heißt.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:01:82:ae brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.114/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159625sec preferred_lft 1892159625sec
    inet6 fe80::216:3eff:fe01:82ae/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:86:fe:f0:88 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

Im obigen Beispiel ist die primäre IP-Adresse für die Schnittstelle eth0 die 172.16.50.114. Möglicherweise sehen Sie auch eine docker0-Schnittstelle, falls Docker auf dem System installiert ist.

Ein einfacherer Befehl, um nur die IP-Adressen des Rechners anzuzeigen, ist hostname -I.

hostname -I

Dieser Befehl gibt eine durch Leerzeichen getrennte Liste der IP-Adressen des Rechners aus.

172.16.50.114 172.17.0.1

Die Ausgabe zeigt mehrere IP-Adressen: die IP der primären Netzwerkschnittstelle (172.16.50.114) und die IP der Docker-Bridge (172.17.0.1).

Jetzt wissen Sie, wie Sie die IP-Adresse Ihres Rechners finden. Im nächsten Schritt verwenden Sie die localhost-Adresse (127.0.0.1), um sich mit dem SSH-Server zu verbinden, der auf demselben Rechner läuft.

Interaktive SSH-Sitzung zum Remote-Server aufbauen

In diesem Schritt verwenden Sie den ssh-Client, um eine interaktive Sitzung mit dem von Ihnen konfigurierten OpenSSH-Server aufzubauen. Eine interaktive Sitzung bietet Ihnen eine Kommandozeile auf dem Remote-Server, sodass Sie Befehle so ausführen können, als wären Sie physisch dort angemeldet.

Um eine Verbindung herzustellen, verwenden Sie den Befehl ssh, gefolgt vom Benutzernamen und der Adresse des Servers im Format ssh <benutzer>@<hostname_oder_ip>. Da Sie sich mit dem Server verbinden, der auf Ihrem eigenen Rechner (localhost) als Benutzer sshuser läuft, verwenden Sie die IP-Adresse 127.0.0.1.

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

ssh sshuser@127.0.0.1

Wenn Sie sich zum ersten Mal mit einem neuen SSH-Server verbinden, zeigt Ihr SSH-Client den Fingerabdruck des öffentlichen Schlüssels des Servers an und bittet Sie, dessen Authentizität zu bestätigen. Dies ist eine Sicherheitsmaßnahme, um „Man-in-the-Middle“-Angriffe zu verhindern. Sie sollten yes eingeben und die Eingabetaste drücken, um fortzufahren.

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '127.0.0.1' (ED25519) to the list of known hosts.

Nach der Bestätigung des Host-Keys werden Sie nach dem Passwort für den Benutzer sshuser auf dem Remote-Server gefragt. Geben Sie das Passwort password123 ein, das Sie bei der Erstellung des Benutzers festgelegt haben.

sshuser@127.0.0.1's password:

Sobald Sie das richtige Passwort eingegeben haben, werden Sie eingeloggt und erhalten die Willkommensnachricht des Servers sowie eine neue Eingabeaufforderung. Beachten Sie, wie sich die Eingabeaufforderung ändern kann, um anzuzeigen, dass Sie sich auf dem Remote-Host befinden.

Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

sshuser@ubuntu:~$

Um zu bestätigen, dass Sie sich in einer Remote-Sitzung befinden, können Sie einen Befehl wie pwd ausführen, um das aktuelle Arbeitsverzeichnis anzuzeigen.

pwd

Die Ausgabe zeigt Ihr Home-Verzeichnis auf dem Remote-Rechner.

/home/sshuser

Um die interaktive SSH-Sitzung zu beenden und zur Shell Ihres lokalen Rechners zurückzukehren, geben Sie einfach exit ein und drücken die Eingabetaste.

exit

Sie sehen eine Nachricht, die bestätigt, dass die Verbindung geschlossen wurde, und Ihre ursprüngliche Eingabeaufforderung erscheint wieder.

logout
Connection to 127.0.0.1 closed.

Sie haben nun erfolgreich eine interaktive SSH-Sitzung aufgebaut und wieder beendet.

Einzelnen Befehl remote über SSH ausführen

In diesem Schritt lernen Sie, wie Sie einen einzelnen Befehl auf einem Remote-Server ausführen, ohne eine vollständige interaktive Sitzung zu starten. Dies ist eine leistungsstarke Funktion von SSH, die häufig in Skripten und zur Automatisierung eingesetzt wird, da sie es ermöglicht, schnell Informationen abzurufen oder eine Aufgabe auf einem entfernten Rechner auszuführen und die Verbindung sofort wieder zu trennen.

Die Syntax hierfür besteht darin, den gewünschten Befehl einfach am Ende Ihres üblichen ssh-Verbindungsaufrufs anzuhängen. Es ist gute Praxis, den Remote-Befehl in Anführungszeichen zu setzen, um zu verhindern, dass die lokale Shell ihn interpretiert.

Versuchen wir, den Befehl hostname auf dem Remote-Server auszuführen. Dieser Befehl gibt den Hostnamen des Systems aus.

ssh sshuser@127.0.0.1 "hostname"

Sie werden wie zuvor nach dem Passwort (password123) gefragt. Nachdem Sie es eingegeben haben, wird der Befehl hostname auf dem Remote-Server ausgeführt, seine Ausgabe wird in Ihrem Terminal angezeigt und die SSH-Verbindung wird automatisch geschlossen.

sshuser@127.0.0.1's password:
iZrj91w6gb8osv0mra83hdZ

Beachten Sie, dass Sie sofort zu Ihrer lokalen Eingabeaufforderung zurückkehren, ohne exit eingeben zu müssen.

Sie können auch komplexere Befehle ausführen. Lassen Sie uns zum Beispiel den Inhalt des Wurzelverzeichnisses (/) auf dem Remote-Server mit ls -l / auflisten.

ssh sshuser@127.0.0.1 "ls -l /"

Geben Sie erneut das Passwort password123 ein, wenn Sie dazu aufgefordert werden. Die Ausgabe ist eine detaillierte Liste der Dateien und Verzeichnisse im Wurzeldateisystem des Remote-Servers.

sshuser@127.0.0.1's password:
total 72
lrwxrwxrwx   1 root root     7 Apr 21  2022 bin -> usr/bin
drwxr-xr-x   4 root root  4096 May 30  2023 boot
drwxr-xr-x  19 root root  4080 Jun 30 09:23 dev
drwxr-xr-x 137 root root 12288 Jun 30 09:26 etc
drwxr-xr-x   5 root root  4096 Jun 30 09:26 home
lrwxrwxrwx   1 root root     7 Apr 21  2022 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Apr 21  2022 lib32 -> usr/lib32
lrwxrwxrwx   1 root root     9 Apr 21  2022 lib64 -> usr/lib64
lrwxrwxrwx   1 root root    10 Apr 21  2022 libx32 -> usr/libx32
drwx------   2 root root 16384 Dec 28  2022 lost+found
drwxr-xr-x   2 root root  4096 Apr 21  2022 media
drwxr-xr-x   2 root root  4096 Apr 21  2022 mnt
drwxr-xr-x   5 root root  4096 Feb 27  2023 opt
dr-xr-xr-x 231 root root     0 Jun 30 09:22 proc
drwx------   8 root root  4096 Jun 30 09:26 root
drwxr-xr-x  35 root root  1060 Jun 30 09:30 run
lrwxrwxrwx   1 root root     8 Apr 21  2022 sbin -> usr/sbin
drwxr-xr-x  10 root root  4096 Feb 18  2023 snap
drwxr-xr-x   2 root root  4096 Apr 21  2022 srv
dr-xr-xr-x  13 root root     0 Jun 30 09:22 sys
drwxrwxrwt  18 root root  4096 Jun 30 09:30 tmp
drwxr-xr-x  14 root root  4096 Apr 21  2022 usr
drwxr-xr-x  13 root root  4096 Apr 21  2022 var

Diese Methode ist unglaublich effizient für die Verwaltung mehrerer Server oder für die Integration von Remote-Operationen in Ihre lokalen Shell-Skripte. Sie haben nun die zwei wichtigsten Arten der SSH-Nutzung gelernt: für interaktive Sitzungen und für die Ausführung einzelner Befehle.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Schritte gelernt, um Secure Shell (SSH) für die Remote-Serververwaltung zu aktivieren und zu nutzen. Sie begannen mit der Vorbereitung des Remote-Linux-Servers, was die Aktualisierung des Paket-Repository-Index mit sudo apt-get update und die anschließende Installation des Pakets openssh-server beinhaltete. Dieser Prozess konfigurierte das System so, dass es eingehende SSH-Verbindungen sicher akzeptiert und den sshd-Dienst automatisch startet.

Anschließend haben Sie ein dediziertes Benutzerkonto (sshuser) mit einem bekannten Passwort (password123) für die SSH-Authentifizierung erstellt, da der Standardbenutzer labex zwar sudo-Rechte besitzt, aber kein Passwort für SSH-Verbindungen hat. Sie haben die Benutzererstellung verifiziert und bestätigt, dass das Home-Verzeichnis ordnungsgemäß angelegt wurde.

Nachdem der Server und das Benutzerkonto bereit waren, lernten Sie, wie Sie die IP-Adresse des Servers ermitteln – eine entscheidende Information für jeden Client, um eine Verbindung zu initiieren. Danach praktizierten Sie die zwei Hauptarten der SSH-Nutzung: den Aufbau einer vollständigen, interaktiven Kommandozeilensitzung, um direkt auf dem Remote-Server zu arbeiten, und die Ausführung eines einzelnen, nicht-interaktiven Befehls aus der Ferne, was für Skripting- und Automatisierungsaufgaben hocheffizient ist.