Einführung
In diesem Lab erlernen Sie die grundlegenden Fähigkeiten, um eine Verbindung zu einem entfernten Linux-Server über das Secure Shell (SSH)-Protokoll herzustellen und diesen zu verwalten. Sie beginnen mit der Einrichtung der Remote-Umgebung, was die Installation und Konfiguration des OpenSSH-Serverpakets umfasst. Nachdem sichergestellt ist, dass der Server Verbindungen akzeptiert, erfahren Sie, wie Sie dessen IP-Adresse ermitteln – ein entscheidender Schritt, um eine Verbindung von einem Client-Rechner aus aufzubauen.
Sobald der Server konfiguriert ist, üben Sie zwei primäre Methoden der Remote-Interaktion via SSH. Zuerst bauen Sie eine vollständig interaktive Shell-Sitzung auf, die Ihnen den vollständigen Befehlszeilenzugriff auf die entfernte Maschine ermöglicht. Zweitens lernen Sie, wie Sie einen einzelnen, spezifischen Befehl auf dem Remote-Server ausführen, ohne eine vollständige interaktive Sitzung zu starten – eine Technik, die für Skripting- und Automatisierungsaufgaben äußerst effektiv ist.
OpenSSH-Server installieren und konfigurieren
In diesem Schritt installieren Sie das OpenSSH-Serverpaket, das es Ihrem System ermöglicht, eingehende SSH-Verbindungen zu akzeptieren. SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ein unsicheres Netzwerk. Das Paket openssh-server enthält die Kernkomponenten für das Hosting eines SSH-Servers.
Zunächst ist es bewährte Praxis, die Paketliste Ihres Systems zu aktualisieren, um sicherzustellen, dass Sie die neueste Version der Software erhalten. Der Benutzer labex verfügt über sudo-Privilegien, 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 automatisch alle Abfragen mit "yes", wodurch die Installation nicht-interaktiv verläuft.
sudo apt-get install -y openssh-server
In einigen LabEx-Umgebungen zeigt Ubuntu während der Installation möglicherweise einen Dialog zum Neustart von Diensten an. Falls dies geschieht, starten Sie vncserver nicht neu, da ein Neustart die Verbindung zum Browser-Desktop trennen und die Seite grau werden lassen kann. Verwenden Sie stattdessen eine dieser sicheren Optionen:
- Drücken Sie
Tab, um<Cancel>auszuwählen, und drücken Sie dann Enter. - Oder drücken Sie
Space, um die Auswahlvncserveraufzuheben, und wählen Sie dann<Ok>.
Sollte der Browser-Desktop dennoch grau werden, aktualisieren Sie die LabEx-Seite, um die Sitzung wiederherzustellen und mit dem Lab fortzufahren.
Nach Abschluss des Befehls sollten Sie eine Ausgabe sehen, die die Installation und Einrichtung des openssh-server und seiner 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-Serverdienst, genannt 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 Dienstemanagers.
Ü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 zu akzeptieren.
● 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 beenden und zur Befehlszeile zurückzukehren.
Großartig! 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 erfahren dann, wie Sie die IP-Adresse des Servers finden und eine Verbindung herstellen.
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 über sudo-Privilegien verfügt, 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 erstellt das Benutzerkonto und fordert Sie auf, ein Passwort und weitere Details festzulegen.
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 vollständigem Namen, Zimmernummer usw. gefragt, aber Sie können einfach Enter drücken, um diese Felder zu ü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 durchsuchen:
grep sshuser /etc/passwd
Sie sollten eine Ausgabe ähnlich der folgenden 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 UID- (User ID) und GID- (Group ID) Nummern können je nach 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-Privilegien 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 anzeigen:
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 (drwxr-x---) hat, was bedeutet, dass nur der Eigentümer (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 Kennzeichnung, die jedem Gerät zugewiesen wird, das mit einem Computernetzwerk verbunden ist, das das Internetprotokoll für die Kommunikation verwendet. Um eine SSH-Verbindung herzustellen, muss der Client-Rechner die IP-Adresse des Servers kennen, mit dem er sich verbinden möchte.
In einem typischen Szenario mit zwei separaten Maschinen würden Sie diese IP-Adresse verwenden, um sich vom Client aus zu verbinden. Für dieses Lab arbeiten Sie jedoch auf einer einzigen virtuellen Maschine, die sowohl als SSH-Server als auch als SSH-Client fungiert. Um eine Verbindung zum SSH-Server auf Ihrer eigenen Maschine herzustellen, können Sie eine spezielle IP-Adresse verwenden: 127.0.0.1, auch bekannt als localhost. Diese Adresse bezieht sich immer auf die lokale Maschine selbst.
Dennoch ist es eine wesentliche Fähigkeit, die netzwerkseitige IP-Adresse Ihrer Maschine zu finden. 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 ist.
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 eth0-Schnittstelle 172.16.50.114. Sie sehen möglicherweise auch eine docker0-Schnittstelle, falls Docker auf dem System installiert ist.
Ein einfacherer Befehl, um nur die IP-Adressen der Maschine anzuzeigen, ist hostname -I.
hostname -I
Dieser Befehl gibt eine durch Leerzeichen getrennte Liste der IP-Adressen der Maschine 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 Ihrer Maschine finden. Im nächsten Schritt verwenden Sie die localhost-Adresse (127.0.0.1), um eine Verbindung zum SSH-Server auf derselben Maschine herzustellen.
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 Befehlszeile auf dem Remote-Server, sodass Sie Befehle 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 <user>@<hostname_or_ip>. Da Sie eine Verbindung zum Server auf Ihrer eigenen Maschine (localhost) als Benutzer sshuser herstellen, 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 Enter 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.
Nachdem Sie den Host-Schlüssel bestätigt haben, werden Sie nach dem Passwort für den Benutzer sshuser auf dem Remote-Server gefragt. Geben Sie das Passwort password123 ein, das Sie beim Erstellen des Benutzers festgelegt haben.
sshuser@127.0.0.1's password:
Sobald Sie das richtige Passwort eingegeben haben, werden Sie angemeldet und erhalten die Willkommensnachricht des Servers sowie eine neue Eingabeaufforderung. Beachten Sie, wie sich die Eingabeaufforderung möglicherweise ändert, 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 der Remote-Maschine.
/home/sshuser
Um die interaktive SSH-Sitzung zu schließen und zu Ihrer lokalen Shell zurückzukehren, geben Sie einfach exit ein und drücken Sie Enter.
exit
Sie sehen eine Meldung, 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 geschlossen.
Einzelnen Befehl remote via 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 verwendet wird, da sie es Ihnen ermöglicht, schnell Informationen abzurufen oder eine Aufgabe auf einer Remote-Maschine auszuführen und sofort wieder die Verbindung zu trennen.
Die Syntax hierfür besteht einfach darin, den Befehl, den Sie ausführen möchten, an Ihre übliche ssh-Verbindungszeichenfolge anzuhängen. Es ist bewährte 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 gedruckt 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 Root-Verzeichnisses (/) auf dem Remote-Server mit ls -l / auflisten.
ssh sshuser@127.0.0.1 "ls -l /"
Geben Sie auch hier bei Aufforderung das Passwort password123 ein. Die Ausgabe ist eine detaillierte Auflistung der Dateien und Verzeichnisse im Root-Dateisystem 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 äußerst 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 primären Möglichkeiten zur Verwendung von SSH kennengelernt: für interaktive Sitzungen und für die Ausführung einzelner Befehle.
Zusammenfassung
In diesem Lab haben Sie die grundlegenden Schritte zur Aktivierung und Nutzung von Secure Shell (SSH) für die Remote-Serververwaltung erlernt. Sie begannen mit der Vorbereitung des entfernten Linux-Servers, was die Aktualisierung des Paket-Repository-Index mit sudo apt-get update und die anschließende Installation des Pakets openssh-server umfasste. Dieser Prozess konfigurierte das System so, dass es sicher eingehende SSH-Verbindungen akzeptiert und den sshd-Dienst automatisch startet.
Als Nächstes erstellten Sie ein dediziertes Benutzerkonto (sshuser) mit einem bekannten Passwort (password123) für SSH-Authentifizierungszwecke, da der Standardbenutzer labex zwar über sudo-Privilegien verfügt, aber kein Passwort für SSH-Verbindungen besitzt. Sie überprüften die Benutzererstellung und bestätigten, dass das Home-Verzeichnis ordnungsgemäß eingerichtet wurde.
Mit dem Server und dem Benutzerkonto bereit, lernten Sie, wie Sie die IP-Adresse des Servers ermitteln – eine entscheidende Information für jeden Client, um eine Verbindung zu initiieren. Anschließend übten Sie die zwei primären Arten der SSH-Nutzung: den Aufbau einer vollständigen, interaktiven Befehlszeilensitzung, um direkt auf dem Remote-Server zu arbeiten, und die remote Ausführung eines einzelnen, nicht-interaktiven Befehls, was für Skripting- und Automatisierungsaufgaben äußerst effizient ist.



