Verbindung zu einem Remote-Linux-Server über SSH

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor lernen Sie die wesentlichen Fähigkeiten für die Verbindung zu und die Verwaltung eines entfernten Linux-Servers mithilfe des Secure Shell (SSH)-Protokolls. Sie beginnen mit der Einrichtung der entfernten Umgebung, was die Installation und Konfiguration des OpenSSH-Serverpakets beinhaltet. Nachdem Sie sichergestellt haben, dass der Server bereit ist, Verbindungen zu akzeptieren, lernen Sie, wie Sie seine IP-Adresse erhalten, ein entscheidender Schritt für den Aufbau einer Verbindung von einem Client-Computer aus.

Sobald der Server konfiguriert ist, üben Sie zwei primäre Methoden der Ferninteraktion über SSH. Erstens stellen Sie eine vollständig interaktive Shell-Sitzung her, die Ihnen vollständigen Kommandozeilenzugriff auf die entfernte Maschine gewährt. Zweitens lernen Sie, wie Sie einen einzelnen, spezifischen Befehl auf dem entfernten Server ausführen, ohne eine vollständige interaktive Sitzung zu starten, eine Technik, die für Skripting- und Automatisierungsaufgaben äußerst effektiv ist.

Installation und Konfiguration des OpenSSH-Servers

In diesem Schritt installieren Sie das OpenSSH-Server-Paket, das es Ihrem System ermöglicht, eingehende SSH-Verbindungen zu akzeptieren. SSH oder Secure Shell ist ein kryptografisches Netzwerkprotokoll zur sicheren Bereitstellung von Netzwerkdiensten über ein unsicheres Netzwerk. Das Paket openssh-server enthält die Kernkomponenten für den Betrieb eines SSH-Servers.

Zuerst ist es eine gute Praxis, 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, die der folgenden ähnelt und 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 Aufforderungen mit "Ja" und macht die Installation nicht-interaktiv.

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 seinen 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 mit dem Namen sshd sollte nach der Installation automatisch gestartet werden. 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 anzeigen, 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 verlassen und zur Eingabeaufforderung zurückzukehren.

Großartig! Der OpenSSH-Server ist nun auf Ihrem System installiert und läuft. 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 damit verbinden.

Erstellen eines neuen Benutzers für die SSH-Demonstration

In diesem Schritt erstellen Sie ein neues Benutzerkonto, das für SSH-Verbindungen verwendet wird. Da der Standardbenutzer labex über sudo-Berechtigungen 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 zuerst 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 Labor password123 als Passwort. Sie werden auch nach zusätzlichen Informationen wie vollständigem Namen, Raumnummer usw. gefragt, aber Sie können die Eingabetaste 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 überprüfen:

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 im System variieren.

Sie können auch überprüfen, ob das Home-Verzeichnis des Benutzers erstellt wurde. Beachten Sie, dass Sie sudo-Berechtigungen 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 Besitzer (sshuser) und Benutzer in derselben Gruppe darauf zugreifen können. Deshalb ist sudo erforderlich, um dessen 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.

Abrufen der IP-Adresse des SSH-Servers

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 zugewiesen wird, das mit einem Computernetzwerk verbunden ist und das Internet Protocol zur Kommunikation verwendet. Um eine SSH-Verbindung herzustellen, muss die Client-Maschine die IP-Adresse des Servers kennen, mit dem sie 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 Labor 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 zu verbinden, der auf Ihrer eigenen Maschine läuft, 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 wichtige Fähigkeit zu wissen, wie man die netzwerkseitige IP-Adresse seiner Maschine findet. Der moderne Befehl dafü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 Eintrag inet unter Ihrer primären Netzwerkschnittstelle, die typischerweise 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 Schnittstelle eth0 172.16.50.114. Möglicherweise sehen Sie auch eine docker0-Schnittstelle, wenn 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).

Nun wissen Sie, wie Sie die IP-Adresse Ihrer Maschine finden. Im nächsten Schritt verwenden Sie die localhost-Adresse (127.0.0.1), um sich mit dem SSH-Server zu verbinden, der auf derselben Maschine läuft.

Herstellen einer interaktiven SSH-Sitzung mit dem Remote-Server

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

Um sich zu verbinden, verwenden Sie den Befehl ssh, gefolgt vom Benutzernamen und der Adresse des Servers im Format ssh <user>@<hostname_or_ip>. Da Sie sich mit dem auf Ihrer eigenen Maschine laufenden Server (localhost) als Benutzer sshuser verbinden, verwenden Sie die IP-Adresse 127.0.0.1.

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

ssh [email protected]

Wenn Sie sich zum ersten Mal mit einem neuen SSH-Server verbinden, zeigt Ihr SSH-Client den öffentlichen Schlüssel-Fingerabdruck des Servers an und fragt Sie, ob Sie dessen Authentizität bestätigen möchten. 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.

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.

[email protected]'s password:

Sobald Sie das richtige Passwort eingegeben haben, werden Sie angemeldet und erhalten die Willkommensnachricht des Servers und eine neue Kommandozeile. 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 auszugeben.

pwd

Die Ausgabe zeigt Ihr Home-Verzeichnis auf der Remote-Maschine.

/home/sshuser

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

exit

Sie sehen eine Meldung, die bestätigt, dass die Verbindung geschlossen wurde, und Ihre ursprüngliche Eingabeaufforderung wird zurückgegeben.

logout
Connection to 127.0.0.1 closed.

Sie haben nun erfolgreich eine interaktive SSH-Sitzung hergestellt und geschlossen.

Ausführen eines einzelnen Befehls remote über SSH

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 einem Remote-Computer auszuführen und sich dann sofort wieder zu trennen.

Die Syntax hierfür besteht darin, den auszuführenden Befehl einfach an das Ende Ihrer üblichen ssh-Verbindungszeichenfolge anzuhängen. Es ist eine gute Praxis, den Remote-Befehl in Anführungszeichen zu setzen, um zu verhindern, dass Ihre lokale Shell ihn interpretiert.

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

ssh [email protected] "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 ausgegeben und die SSH-Verbindung wird automatisch geschlossen.

[email protected]'s password:
iZrj91w6gb8osv0mra83hdZ

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

Sie können auch komplexere Befehle ausführen. Listen wir zum Beispiel den Inhalt des Stammverzeichnisses (/) auf dem Remote-Server mit ls -l / auf.

ssh [email protected] "ls -l /"

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

[email protected]'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 beiden Hauptanwendungsarten von SSH gelernt: 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 Verwaltung von Remote-Servern gelernt. Sie begannen mit der Vorbereitung des Remote-Linux-Servers, was das Aktualisieren des Paket-Repository-Indexes mit sudo apt-get update und die anschließende Installation des Pakets openssh-server umfasste. Dieser Prozess konfigurierte das System so, dass es eingehende SSH-Verbindungen sicher akzeptiert, wobei der sshd-Dienst automatisch gestartet wurde.

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

Nachdem der Server und das Benutzerkonto bereit waren, haben Sie gelernt, wie Sie die IP-Adresse des Servers ermitteln, eine entscheidende Information für jeden Client, um eine Verbindung herzustellen. Anschließend haben Sie die beiden Hauptanwendungsarten von SSH geübt: das Herstellen einer vollständigen, interaktiven Kommandozeilensitzung, um direkt auf dem Remote-Server zu arbeiten, und das Ausführen eines einzelnen, nicht-interaktiven Befehls remote, was für Skripting- und Automatisierungsaufgaben sehr effizient ist.