Zum Hauptinhalt springen

So konfigurieren und aktivieren Sie SSH in Ubuntu

Veröffentlicht am:
.
19 Minuten Lesezeit
.
Für die Englische Version

SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll, das entwickelt wurde, um eine sichere Fernverwaltung und Datenübertragung zu ermöglichen. SSH gewährleistet sichere Vorgänge wie verschlüsselte Anmeldesitzungen, Befehlsausführung, Dateiübertragungen (SCP, SFTP) und Tunneling über unsichere Netzwerke. Insbesondere auf Linux-Servern wird die ordnungsgemäße Installation und Konfiguration des SSH-Dienstes als eine der grundlegenden Sicherheitsmaßnahmen für Systemadministratoren angesehen.

Das Ubuntu-Betriebssystem enthält OpenSSH, das das SSH-Protokoll unterstützt, in seinen offiziellen Repositories. Dies ermöglicht es den Benutzern, sowohl die Client- als auch die Serverseite schnell und sicher zu konfigurieren. SSH ermöglicht die Verwendung von asymmetrischen schlüsselbasierten Authentifizierungsmethoden anstelle von Passwörtern und bildet die Grundlage für Multi-Faktor-Sicherheitssysteme. Darüber hinaus bieten Funktionen wie Protokollierung, Zugriffskontrolleinstellungen und Verbindungsbeschränkungen Systemadministratoren detaillierte Überwachungs- und Kontrollmöglichkeiten.

In diesem Leitfaden werden wir technisch erläutern, wie man den SSH-Dienst auf Ubuntu 22.04 oder späteren Versionen installiert und aktiviert, einschließlich Konfigurationsschritten, Sicherheitsverbesserungen und Fehlersuche-Techniken.

Anforderungen

Um diesen SSH-Konfigurationsleitfaden umzusetzen, müssen Sie die folgenden Anforderungen erfüllen.

  • Ubuntu 22.04 LTS oder eine neuere Version: Diese Version enthält aktuelle und sichere Versionen der OpenSSH-Pakete. Es ist kompatibel mit der systemd-basierten Dienstverwaltung (systemctl).
  • sudo- oder Root-Benutzerrechte: Systemberechtigungen sind erforderlich, um den SSH-Dienst zu installieren, zu konfigurieren und zu verwalten. Der Befehl sudo ermöglicht die temporäre Ausführung mit administrativen Rechten.
  • Aktive Internetverbindung: Eine Internetverbindung ist notwendig, um erforderliche Pakete (z.B. openssh-server, fail2ban usw.) über den Paketmanager (APT) herunterzuladen und das System auf dem neuesten Stand zu halten.
Starten Sie noch heute kostenlos mit Zenarmor

1. SSH-Server installieren

Die Installation des SSH-Servers ist der erste Schritt zur Aktivierung der Remote-Systemadministration. Auf Ubuntu wird diese Funktionalität durch das Paket openssh-server bereitgestellt. Sie können den SSH-Server auf Ubuntu installieren, indem Sie den folgenden Befehl ausführen.

sudo apt update && sudo apt install openssh-server –y

Dieser Befehl aktualisiert die Systempaketlisten und installiert den SSH-Server, um ihn auf eingehende Verbindungen vorzubereiten.

tipp

Die -y-Flagge antwortet automatisch mit „ja“ auf alle Eingabeaufforderungen während der Installation. Es ist nützlich für Automatisierung oder schnelle Bereitstellungen.

warnung

Nach der Installation startet der SSH-Dienst automatisch. Allerdings erlaubt Ihre Firewall möglicherweise noch keine SSH-Verbindungen. Das Ausführen mit Standardkonfigurationen könnte ein Sicherheitsrisiko darstellen. Daher ist es wichtig, mit der richtigen Konfiguration und den entsprechenden Zugriffskontrollschritten vorzugehen.

2. Starten und Aktivieren des SSH-Dienstes

Das Starten des SSH-Dienstes macht ihn sofort einsatzbereit. Zusätzlich stellt das Aktivieren des Dienstes sicher, dass er beim Systemstart automatisch gestartet wird. Sie können den SSH-Dienst starten und aktivieren, indem Sie den nächsten Befehl ausführen.

sudo systemctl start ssh
sudo systemctl enable ssh

Der erste Befehl startet den Dienst sofort. Der zweite Befehl stellt sicher, dass der Dienst jedes Mal automatisch startet, wenn das System neu gestartet wird.

tipp

Der SSH-Dienst startet normalerweise automatisch nach der Installation. Bei benutzerdefinierten oder minimalen Installationen muss dieser Schritt jedoch möglicherweise manuell durchgeführt werden.

hinweis

Der systemctl-Befehl ist Teil des systemd-basierten Dienstkontrollsystems von Ubuntu und ist das Hauptwerkzeug zur Verwaltung von Diensten.

warnung

Sobald der SSH-Dienst gestartet ist, wird das System von externen Netzwerken aus zugänglich. Daher ist es wichtig, Zugriffssteuerungen und Firewall-Regeln vor oder unmittelbar nach dem Starten des Dienstes zu konfigurieren.

3. Überprüfen Sie die SSH-Installation

Die Überprüfung, ob der SSH-Dienst korrekt läuft, ist ein entscheidender Schritt zur Bestätigung einer erfolgreichen Installation. Diese Überprüfung ist nach einem Systemneustart oder Konfigurationsänderungen nützlich, um sicherzustellen, dass der Dienst weiterhin aktiv ist. Sie können den Status des SSH-Dienstes anzeigen, indem Sie den folgenden Befehl ausführen.

sudo systemctl status ssh

Dieser Befehl zeigt den aktuellen Betriebsstatus des SSH-Dienstes an. Wenn die Ausgabe "active (running)" enthält, funktioniert der Dienst korrekt. Wenn der SSH-Dienst nicht läuft, können Sie ihn mit dem nächsten Befehl starten.

sudo systemctl start ssh

Sie können detaillierte Protokolle mit dem folgenden Befehl einsehen.

journalctl -u ssh
tipp

Wenn Sie Nachrichten wie "inaktiv" oder "fehlgeschlagen" erhalten, überprüfen Sie die Konfigurationsdatei auf Syntaxfehler oder stellen Sie sicher, dass es keinen Portkonflikt gibt.

4. SSH konfigurieren (Optional)

Nach der Installation des SSH-Dienstes können die Sicherheitseinstellungen und Zugriffssteuerungen über die SSH-Konfigurationsdatei /etc/ssh/sshd_config konfiguriert werden. Dieser Schritt wird empfohlen, um eine benutzerdefinierte Zugriffspolitik zu erstellen, die auf die Bedürfnisse Ihres Systems zugeschnitten ist.

sudo nano /etc/ssh/sshd_config

Dieser Befehl öffnet die Hauptkonfigurationsdatei des SSH-Daemons mit dem Nano-Texteditor.

tipp

Damit Änderungen an der Datei /etc/ssh/sshd_config wirksam werden, muss der SSH-Dienst immer neu gestartet werden. Andernfalls werden die neuen Einstellungen nicht angewendet. Allgemeine sicherheitsrelevante Direktiven in der SSH-Server-Konfigurationsdatei sind unten aufgeführt.

  • Port 2222: Verwenden Sie einen weniger häufigen Port, wie 2222 anstelle des Standardports 22.
  • PermitRootLogin no: Direkten Login für den Root-Benutzer deaktivieren
  • PasswordAuthentication no: Schlüsselbasierte Anmeldung erzwingen, um Passwortangriffe zu verhindern
  • AllowUsers user1 user2: Deny SSH-Zugriff für spezifische Benutzer, wie user1 und user2. ErlaubeBenutzer user1 user2: Beschränke den SSH-Zugriff auf bestimmte Benutzer, wie user1 und user2.

Um Ihre Änderungen anzuwenden, starten Sie den SSH-Dienst neu, indem Sie den nächsten Befehl ausführen.

sudo systemctl restart ssh

Das Neustarten des Dienstes stellt sicher, dass Ihre Konfigurationsänderungen in den Speicher geladen werden.

tipp

Es wird dringend empfohlen, die Konfigurationsdatei zu sichern, bevor Änderungen vorgenommen werden, indem der folgende Befehl ausgeführt wird.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
warnung

Wenn Sie den SSH-Port ändern, ohne Ihre Firewall-Regeln zu aktualisieren, könnten Sie sich aus dem System aussperren. Beim Vornehmen von Änderungen aus der Ferne, halten Sie eine zweite Terminal-Sitzung offen, um versehentliche Trennungen zu vermeiden.

5. Firewall-Einstellungen anpassen (falls zutreffend)

Sobald der SSH-Dienst korrekt installiert und konfiguriert ist, ist es wichtig sicherzustellen, dass Ihre Firewall (z.B. UFW) eingehende Verbindungen zum SSH-Port zulässt. Andernfalls werden eingehende Verbindungsversuche von außerhalb des Netzwerks blockiert.

sudo ufw allow ssh

Dieser Befehl öffnet den TCP-Port 22 auf UFW (Uncomplicated Firewall), der der Standardport für SSH ist. Wenn Sie den Port in der SSH-Konfigurationsdatei geändert haben, müssen Sie diesen Befehl entsprechend anpassen. Wenn Sie einen anderen Port in /etc/ssh/sshd_config konfiguriert haben, stellen Sie sicher, dass Ihre UFW-Regel dies widerspiegelt. Zum Beispiel, wenn Sie Ihren SSH-Port auf 2222 gesetzt haben, verwenden Sie den folgenden Befehl, um SSH-Zugriff zu erlauben.

sudo ufw allow 2222/tcp

Es wird empfohlen, das Protokoll (TCP/UDP) explizit anzugeben, wenn benutzerdefinierte Ports erlaubt werden.

tipp

Um zu überprüfen, welche Dienste und Ports derzeit durch die Firewall erlaubt sind, führen Sie den nächsten Befehl aus.

sudo ufw status verbose

6. Testen Sie die SSH-Verbindung von einem anderen Computer

Nach Abschluss der SSH-Konfiguration ist es wichtig, zu überprüfen, ob die Konfiguration korrekt funktioniert, indem die Verbindung von einer Remote-Maschine aus getestet wird. Dieser Test bestätigt, dass der Port, der Benutzername und die Firewall-Einstellungen korrekt konfiguriert sind.

ssh username@server_ip_address

Ersetzen Sie username und server_ip_address durch Werte, die für Ihr System geeignet sind.

hinweis

Wenn Sie sich zum ersten Mal verbinden, ist der Authentifizierungsschlüssel des SSH-Servers noch nicht auf dem Client registriert. Sie werden eine Eingabeaufforderung wie die folgende sehen.

“Are you sure you want to continue connecting?”

Type yes to proceed.

Wenn Sie einen benutzerdefinierten Port (z.B. 2222) für den SSH-Dienst verwenden, verbinden Sie den SSH-Server mit dem -p-Parameter. Die -p-Flagge ist erforderlich, wenn Sie sich mit einem nicht standardmäßigen SSH-Port verbinden.

ssh -p 2222 username@server_ip_address
tipp

Nach einem erfolgreichen Login können Sie die Befehle who oder w verwenden, um zu bestätigen, dass die Sitzung aktiv ist. Zusätzlich können Sie hostname oder uptime auf dem Remote-Server verwenden, um dessen Identität und Systemstatus zu überprüfen.

warnung

Wenn die Verbindung fehlschlägt, können mögliche Ursachen das Nichtlaufen des SSH-Dienstes, die Firewall, die den Port blockiert, eine falsche IP-Adresse oder Fehlkonfigurationen in der sshd_config-Datei sein.

Was ist die Bedeutung von SSH in Ubuntu?

SSH (Secure Shell) ist ein grundlegendes Protokoll für sicheres Remote-Management auf Ubuntu und anderen Linux-basierten Betriebssystemen. Es spielt eine entscheidende Rolle bei der Sicherung von über Netzwerke durchgeführten Operationen. Da SSH verschlüsselte Daten anstelle von Klartext überträgt, ermöglicht es Systemadministratoren, Systeme selbst über öffentliche oder potenziell unsichere Netzwerke sicher zuzugreifen.

Aufgrund der weit verbreiteten Nutzung von Ubuntu in Serverumgebungen ist SSH zu einem integralen Bestandteil des Systems geworden. Es funktioniert nahtlos mit Tools wie OpenSSH und bietet standardmäßig eine robuste Sicherheitsinfrastruktur.

Die wichtigsten Vorteile der Verwendung von SSH sind wie folgt.

  • Sicherer Remote-Terminal-Zugriff: Systemadministratoren können alle Operationen sicher über das Terminal durchführen, ohne physischen Zugang zur Maschine zu haben. It's as simple as connecting with ssh user@server.
  • Verschlüsselte Dateiübertragungen: Dateien können sicher mit SCP (Secure Copy) und SFTP (SSH File Transfer Protocol) übertragen werden, mit End-to-End-Verschlüsselung.
  • Automatisierung und skriptbasierte Verwaltung: SSH beschleunigt Wartungsaufgaben, indem es die Ausführung von Skripten aus der Ferne in Automatisierungs-Workflows ermöglicht. Werkzeuge wie Ansible, Fabric und rsync basieren alle auf SSH.
  • Portweiterleitung und Tunneling: SSH ermöglicht die Erstellung sicherer Tunnel, indem entfernte Dienste auf lokale Ports weitergeleitet werden. Dies schützt sensible Daten, während sie über das Internet übertragen werden.
  • Schlüsselbasierte Authentifizierung: SSH unterstützt die Authentifizierung über RSA- oder ECDSA-Schlüsselpaaren anstelle von Passwörtern. Dies stärkt nicht nur die Sicherheit, sondern vereinfacht auch das Identitätsmanagement.

Warum ist SSH entscheidend?

Der SSH-Dienst ist aus folgenden Gründen von entscheidender Bedeutung.

  • Vertraulichkeit: Alle Datenübertragungen sind verschlüsselt; Benutzernamen, Passwörter und Inhalte können nicht im Klartext abgefangen werden.
  • Integrität: Daten kommen genau so an, wie sie gesendet wurden, ohne Manipulation während der Übertragung.
  • Autorisierung: Durch seine Authentifizierungsmechanismen stellt SSH sicher, dass nur autorisierte Benutzer auf das System zugreifen können.

Wie installiert man den OpenSSH-Client auf Ubuntu 22.04?

Der OpenSSH-Client (openssh-client) enthält die Befehlszeilentools, die erforderlich sind, um sich sicher mit einem anderen System über das SSH-Protokoll zu verbinden. In den Desktop-Editionen von Ubuntu ist dieser Client normalerweise standardmäßig installiert. In minimalen oder Server-Installationen muss es jedoch möglicherweise manuell installiert werden. Sie können die Paketliste aktualisieren und den OpenSSH-Client installieren, indem Sie den folgenden Befehl ausführen.

sudo apt update && sudo apt install openssh-client –y

Der erste Befehl aktualisiert den lokalen Paketindex. Der zweite Befehl installiert den OpenSSH-Client.

Um die Installation des SSH-Clients zu überprüfen, überprüfen Sie die SSH-Client-Version, indem Sie den nächsten Befehl ausführen.

ssh –V

Wenn die Ausgabe eine Version wie OpenSSH_8.x zurückgibt, ist der Client erfolgreich installiert.

hinweis

Das openssh-client-Paket enthält Werkzeuge wie ssh, scp und sftp, die für den Fernzugriff, das Kopieren von Dateien und den Dateitransfer verwendet werden.

warnung

Ein System mit nur dem installierten SSH-Client kann Verbindungen zu anderen SSH-Servern initiieren, aber keine eingehenden Verbindungen akzeptieren. Wenn Sie möchten, dass das System als SSH-Server fungiert, müssen Sie das Paket openssh-server installieren.

Wie generiert man SSH-Schlüssel für die passwortlose Anmeldung?

Die SSH-Schlüssel-basierte Authentifizierung bietet eine sicherere und automatisierungsfreundlichere Alternative zur passwortbasierten Anmeldung. Es ist besonders wichtig für Server, die einen dauerhaften Zugriff erfordern, oder für den Einsatz in automatisierten Systemen. Diese Methode beinhaltet die Erstellung eines privaten/öffentlichen Schlüsselpaares. Der öffentliche Schlüssel wird auf den Server kopiert, und während der Verbindung authentifiziert sich der Client nur mit dem privaten Schlüssel.

  1. SSH-Schlüsselpaar generieren: Der folgende Befehl erstellt die Dateien .ssh/id_rsa (privater Schlüssel) und .ssh/id_rsa.pub (öffentlicher Schlüssel).

    ssh-keygen -t rsa -b 4096

    Ein 4096-Bit-RSA-Schlüssel ist stark und weit verbreitet. Wenn Sie den Befehl ausführen, werden Sie nach einem Dateinamen, einem Passwort und anderen Optionen gefragt.

    tipp

    Wenn Sie sich entscheiden, während der Schlüsselerstellung eine Passphrase festzulegen, werden Sie aufgefordert, diese jedes Mal einzugeben, wenn der Schlüssel verwendet wird. Dies fügt eine zusätzliche Sicherheitsebene hinzu.

  2. Öffentlichen Schlüssel auf den Remote-Server kopieren: Verwenden Sie den folgenden Befehl, um Ihren öffentlichen Schlüssel an die Datei ~/.ssh/authorized_keys des Zielbenutzers auf dem Server anzuhängen.

    ssh-copy-user id@server_ip

    Dies überträgt den öffentlichen Schlüssel sicher an den Remote-Server und bereitet ihn für die passwortlose Anmeldung vor.

    hinweis

    Der Befehl ssh-copy-id wird Sie ein letztes Mal nach Ihrem Passwort auf dem Remote-Host fragen, um die Schlüsselinstallation abzuschließen.

  3. Testen Sie den passwortlosen SSH-Login: Um die Konfiguration des passwortlosen SSH-Logins zu testen, können Sie den folgenden Befehl ausführen.

    ssh user@remote_host

    Wenn alles korrekt eingerichtet ist, wird das System den Zugriff ohne Passwortabfrage erlauben.

    tipp

    Wenn SSH weiterhin nach einem Passwort fragt, bedeutet das wahrscheinlich, dass der Schlüssel nicht dem richtigen Benutzerkonto hinzugefügt wurde oder die Dateiberechtigungen falsch sind. Stellen Sie sicher, dass die Datei ~/.ssh/authorized_keys die Berechtigung chmod 600 und das Verzeichnis ~/.ssh die Berechtigung chmod 700 hat.

Wie konfiguriert man SSH für verbesserte Sicherheit?

Während die Standard-SSH-Einstellungen für die meisten Systeme funktional sind, erfordern Server, die öffentlichen Netzwerken ausgesetzt sind, strengere Sicherheitsmaßnahmen. Dieser Abschnitt beschreibt empfohlene Konfigurationen, um den SSH-Dienst gegen unbefugten Zugriff abzusichern.

Um die folgenden Schritte anzuwenden, öffnen Sie die SSH-Konfigurationsdatei.

sudo nano /etc/ssh/sshd_config

Diese Datei ist die Hauptkonfiguration zur Festlegung, wie der SSH-Daemon funktioniert.

  1. Deaktivieren Sie die Passwortauthentifizierung: Das Deaktivieren der Passwortauthentifizierung bei der Verwendung der schlüsselbasierten Anmeldung erhöht die Gesamtsicherheit.

    PasswordAuthentication no
    warnung

    Stellen Sie sicher, dass die schlüsselbasierte Anmeldung ordnungsgemäß funktioniert, bevor Sie die Passwortauthentifizierung deaktivieren, da Sie sich sonst aus dem System aussperren könnten.

  2. Root-Login deaktivieren: Da das Root-Konto volle administrative Berechtigungen hat, sollte der direkte SSH-Zugriff auf Root deaktiviert werden.

    PermitRootLogin no
    warnung

    Stellen Sie sicher, dass mindestens ein Benutzerkonto mit Sudo-Rechten existiert, bevor Sie den Root-Zugriff deaktivieren.

  3. SSH-Zugriff auf bestimmte Benutzer beschränken: Um die Angriffsfläche zu reduzieren, können Sie den SSH-Zugriff auf bestimmte Benutzer beschränken.

    AllowUsers adminuser backupuser

    In diesem Beispiel dürfen sich nur adminuser und backupuser über SSH anmelden.

  4. Ändern Sie den Standard-SSH-Port: Das Ändern des Standardports (22) auf einen nicht standardmäßigen Port kann helfen, niedrigstufige Scans und automatisierte Angriffsversuche zu reduzieren.

    Port 2222
    warnung

    Nachdem Sie den Port geändert haben, stellen Sie sicher, dass Sie Ihre Firewall-Regeln (z.B. UFW oder iptables) aktualisieren, um den neuen Port zuzulassen.

  5. SSH-Dienst neu starten: Um alle Konfigurationsänderungen anzuwenden, müssen Sie den SSH-Dienst neu starten.

    sudo systemctl restart ssh

    Dieser Schritt ist nach jeder Änderung an der SSH-Konfigurationsdatei notwendig.

Diese Einstellungen schützen Ihren SSH-Server sowohl vor automatisierten Angriffen als auch vor gezielten Eindringversuchen und verbessern so Ihre Netzwerksicherheit.

Wie behebt man SSH-Verbindungsprobleme?

Wenn eine SSH-Verbindung fehlschlägt, ist es wichtig, einen systematischen Ansatz zu verfolgen, um die Ursache zu diagnostizieren und das Problem schnell zu beheben. Dieser Abschnitt erklärt häufige Fehlerszenarien und Fehlersuche.

  1. Überprüfen Sie den Status des SSH-Dienstes: Überprüfen Sie zuerst, ob der SSH-Dienst läuft.

    sudo systemctl status ssh

    Wenn die Ausgabe nicht „active (running)“ zeigt, könnte der Dienst gestoppt oder falsch konfiguriert sein.

    Um den Dienst zu starten oder neu zu starten, führen Sie den folgenden Befehl aus.

    sudo systemctl restart ssh
  2. Überprüfen Sie die SSH-Protokolle: Um detaillierte Informationen über Verbindungsprobleme zu sehen, überprüfen Sie die SSH-Protokolle.

    journalctl -u ssh

    Dieser Befehl listet alle Protokolleinträge im Zusammenhang mit dem SSH-Dienst auf. Verbindungsversuche und Fehlermeldungen werden hier angezeigt.

    tipp

    Um Protokolle für einen bestimmten Zeitraum zu überprüfen, verwenden Sie den Parameter --since.

    journalctl -u ssh --since "10 minutes ago"
  3. Überprüfen Sie die Firewall-Regeln: Ihre Firewall (UFW, iptables) könnte den Zugriff auf den SSH-Port blockieren.

    sudo ufw status verbose

    Stellen Sie sicher, dass der erlaubte Port (Standard ist 22) in der Liste erscheint. Wenn Sie einen benutzerdefinierten Port wie 2222 verwenden, stellen Sie sicher, dass er erlaubt ist.

    warnung

    Wenn UFW-Regeln fehlen oder falsch sind, könnten Sie den Remote-Zugriff verlieren. Halten Sie immer eine aktive SSH-Sitzung offen, wenn Sie Firewall-Einstellungen ändern.

  4. Testen der Port-Zugänglichkeit vom Client: Überprüfen Sie, ob der SSH-Port auf dem Remote-System zugänglich ist, indem Sie den folgenden Befehl ausführen.

    telnet server_ip 22

    or

    nc -zv server_ip 2222

    Wenn der Port nicht erreichbar ist, könnte ein Routing- oder Firewall-Gerät die Verbindung blockieren.

  5. Überprüfen Sie die IP-Adresse und den Hostnamen: Eine falsche IP-Adresse oder DNS-Auflösung kann zu Verbindungsfehlern führen. Überprüfen Sie die IP-Adresse des Servers erneut.

    ip a
    hostname -I

    Stellen Sie sicher, dass der Server die richtige IP hat und dass die Adresse, die Sie erreichen möchten, zur richtigen Maschine gehört.

  6. Überprüfen Sie die SSH-Client-Ausgabe auf Fehler: Verwenden Sie den ausführlichen Modus während der Verbindungsversuche, um detaillierte Fehlermeldungen zu erhalten, indem Sie den folgenden Befehl ausführen.

    ssh -v user@server_ip

    Diese Ausgabe hilft dabei, zu identifizieren, an welcher Stelle die Verbindung fehlschlägt (z.B. Netzwerk, Authentifizierung, Protokoll).

Diese Überprüfungen werden die meisten SSH-Probleme aufdecken. Wenn das Problem weiterhin besteht, überprüfen Sie Ihre sshd_config-Datei auf Konfigurationsfehler oder widersprüchliche Einstellungen.

Wie man den SSH-Root-Login aus Sicherheitsgründen deaktiviert?

Das Root-Konto hat das höchste Privilegienniveau auf einem System, was den direkten SSH-Zugriff auf Root zu einem erheblichen Sicherheitsrisiko macht. Das Deaktivieren dieses Zugriffs hilft, Brute-Force-Angriffe zu reduzieren und unbefugten administrativen Zugriff zu verhindern. Um den SSH-Root-Login zu deaktivieren, können Sie die folgenden Schritte ausführen.

  1. Öffnen Sie die SSH-Konfigurationsdatei: Um die SSH-Konfiguration zu bearbeiten, öffnen Sie die sshd_config-Datei mit dem folgenden Befehl.

    Sudo nano /etc/ssh/sshd_config

    Diese Datei steuert, wie sich der SSH-Server verhält, einschließlich aller Zugriffspolitiken.

  2. Suchen und Ändern von PermitRootLogin: Finden Sie die Zeile, die PermitRootLogin enthält, und ändern Sie ihren Wert wie folgt.

    PermitRootLogin no

    Wenn der aktuelle Wert yes oder prohibit-password ist, ändern Sie ihn entsprechend.

    tipp

    Wenn die Zeile mit einem # beginnt, ist sie auskommentiert und wird ignoriert. Entfernen Sie das #, um die Einstellung zu aktivieren.

  3. Stellen Sie sicher, dass es einen Benutzer mit Sudo-Rechten gibt: Bevor Sie das Root-Login deaktivieren, stellen Sie sicher, dass es mindestens einen Benutzer im System mit Sudo-Rechten gibt. Andernfalls könnten Sie den administrativen Zugriff verlieren. Sie können einen Benutzer mit Sudo-Rechten hinzufügen, indem Sie die folgenden Befehle ausführen.

    sudo adduser adminuser
    sudo usermod -aG sudo adminuser

    Dieser Benutzer kann jetzt administrative Aufgaben mit sudo ausführen.

    warnung

    Wenn Sie remote arbeiten, halten Sie eine bestehende SSH-Sitzung offen, während Sie diese Änderungen vornehmen. Dies kann eine versehentliche Aussperrung verhindern, falls etwas schiefgeht.

  4. SSH-Dienst neu starten: Um die Konfigurationsänderungen anzuwenden, starten Sie den SSH-Dienst neu.

    sudo systemctl restart ssh

    Dieser Schritt muss nach jeder Konfigurationsänderung durchgeführt werden.

  5. Konfiguration testen: Versuchen Sie, sich als root anzumelden, um zu bestätigen, dass die Einschränkung funktioniert.

    ssh root@server_ip

    Wenn Sie eine „Permission denied“-Meldung erhalten, wurde die Konfiguration erfolgreich angewendet.

Das Deaktivieren des Root-Logins ist eine grundlegende Sicherheitsmaßnahme, insbesondere bei Systemen, die dem Internet ausgesetzt sind, und trägt dazu bei, die Angriffsfläche erheblich zu verringern.

Wie man SSH mit einer Firewall (UFW und Fail2Ban) verwendet?

Wenn der SSH-Dienst dem öffentlichen Internet ausgesetzt ist, wird er zu einem häufigen Ziel für Angriffe. Um die Sicherheit zu stärken, werden zwei wesentliche Schutzschichten, UFW und Fail2Ban, empfohlen. Während UFW (Uncomplicated Firewall) für die Zugriffskontrolle auf Netzwerkebene verwendet wird, ist Fail2Ban ein nützliches Werkzeug zum dynamischen Blockieren von IP-Adressen gegen Brute-Force-Anmeldeversuche. Sie können Ihren SSH-Server mit UFW und Fail2Ban sichern, indem Sie die nächsten Schritte befolgen.

  1. SSH über UFW zulassen: Standardmäßig verwendet SSH TCP-Port 22. Erlauben Sie den Zugriff auf diesen Port über UFW.

    sudo ufw allow ssh

    Dieser Befehl erlaubt TCP-Verbindungen auf Port 22 basierend auf den Definitionen in /etc/services.

    Wenn Sie Ihren SSH-Port (z.B. auf 2222) geändert haben, führen Sie den nächsten Befehl aus.

    sudo ufw allow 2222/tcp

    Um die aktuellen UFW-Regeln anzuzeigen:

    sudo ufw status verbose
    warnung

    Bevor Sie UFW aktivieren, stellen Sie sicher, dass der SSH-Zugriff über die derzeit aktive Sitzung erlaubt ist. Andernfalls könnten Sie den Remote-Zugriff auf den Server verlieren.

    Aktivieren Sie UFW, indem Sie den folgenden Befehl ausführen.

    sudo ufw enable
  2. Installiere Fail2Ban: Fail2Ban überwacht Systemprotokolldateien und sperrt automatisch IP-Adressen, die mehrere fehlgeschlagene Anmeldeversuche haben. Installieren Sie Fail2Ban, indem Sie den folgenden Befehl ausführen.

    sudo apt install fail2ban –y

    Nach der Installation startet der Fail2Ban-Dienst automatisch.

  3. Konfigurieren Sie Fail2Ban für SSH: Um die Konfiguration anzupassen, ohne die Standardeinstellungen zu ändern, erstellen Sie eine jail.local-Datei.

    sudo nano /etc/fail2ban/jail.local

    Die empfohlene Konfiguration für SSH ist unten angegeben.

    ini
    [sshd]
    enabled = true
    port = ssh
    logpath = /var/log/auth.log
    maxretry = 3
    findtime = 600
    bantime = 3600

    Dieses Setup blockiert jede IP-Adresse, die sich innerhalb von 10 Minuten dreimal nicht einloggen kann, für eine Dauer von 1 Stunde.

    hinweis

    Wenn Sie Ihren SSH-Port geändert haben, aktualisieren Sie port = ssh auf port = 2222 (oder Ihren benutzerdefinierten Port).

  4. Fail2Ban-Dienst neu starten: Um die neue Konfiguration zu aktivieren, starten Sie den Fail2Ban-Dienst neu.

    sudo systemctl restart fail2ban
  5. Überwachen Sie den Fail2Ban-Status: Um aktive Jails und derzeit gesperrte IPs anzuzeigen, führen Sie die folgenden Befehle aus.

    sudo fail2ban-client status
    sudo fail2ban-client status sshd

    Diese Befehle zeigen an, welche Jails aktiv sind und listen die derzeit blockierten IPs auf.

    Wenn Fail2Ban und UFW zusammen verwendet werden, bieten sie sowohl statischen (portbasierten) als auch dynamischen (verhaltensbasierten) Schutz für Ihren SSH-Dienst, was die Sicherheitslage Ihres Servers erheblich verbessert.

Was sind die Vorteile der Verwendung von SSH-Schlüsseln zur Authentifizierung?

SSH-Schlüssel-basierte Authentifizierung bietet eine deutlich sicherere und effizientere Alternative zu traditionellen Benutzername/Passwort-Kombinationen für verschlüsselte Verbindungen. Dieser Authentifizierungs-Mechanismus basiert auf einem kryptografischen Schlüsselpaar, das aus zwei Hauptkomponenten besteht: einem privaten Schlüssel, der vertraulich bleibt und auf der Client-Maschine gespeichert wird, und einem öffentlichen Schlüssel, der auf den Server hochgeladen wird. Dieser Ansatz ist zur Standardmethode sowohl für den persönlichen Systemzugang als auch für moderne Automatisierung oder Cloud-Infrastruktur geworden.

Die wichtigsten Vorteile der SSH-Schlüssel-basierten Authentifizierung sind wie folgt;

  • Stärkere Sicherheit: Schlüssel bestehen aus langen, zufällig generierten Zeichenfolgen, die sie äußerst widerstandsfähig gegen Brute-Force-Angriffe machen. Es besteht kein Risiko, dass Passwortdatenbanken kompromittiert werden.
  • Keine Passwortübertragung: Passwörter werden während der Authentifizierung niemals übertragen, wodurch das Risiko der Abfangung oder des Ablausches über das Netzwerk ausgeschlossen wird.
  • Automatisierungsfreundlich: SSH-Schlüssel ermöglichen eine passwortlose Anmeldung—essentiell für automatisierte Skripte und Cron-Jobs. Sie gewährleisten eine nahtlose Integration in CI/CD-Workflows.
  • Zugriffskontrolle pro Schlüssel: Jeder Benutzer kann ein einzigartiges Schlüsselpaar haben. Einzelne Schlüssel können widerrufen werden, ohne andere zu beeinträchtigen. Der Zugriff kann granular über die Datei ~/.ssh/authorized_keys gesteuert werden.
  • Schlüsselwiderruf ohne Änderung der Systempasswörter: Um den Zugriff zu widerrufen, entfernen Sie einfach den zugehörigen öffentlichen Schlüssel vom Server. Es ist nicht erforderlich, die Systempasswörter zurückzusetzen.
  • Unterstützung für passwortgeschützte private Schlüssel: Private Schlüssel können mit einem Passwort für zusätzlichen Schutz gesichert werden. Selbst wenn der Schlüssel verloren geht, wird unbefugte Nutzung verhindert.
  • Portabel und Wiederverwendbar: SSH-Schlüssel können auf mehreren Servern wiederverwendet und leicht übertragen werden. Dies ist besonders hilfreich für Administratoren, die mehrere Systeme verwalten.

SSH-Schlüsselbasierte Authentifizierung bietet eine strukturierte und effektive Verteidigungsschicht, insbesondere gegen passwortbasierte Angriffe. Aus diesem Grund wird dringend empfohlen, schlüsselsbasierte Authentifizierung in jeder sicheren SSH-Konfiguration zu implementieren.

Wie ändere ich den Standard-SSH-Port?

Der Standard-SSH-Port (22) ist einer der am häufigsten gescannten und von Angreifern ins Visier genommenen Ports. Das Ändern des SSH-Ports ist eine effektive Methode, um die Angriffsfläche des Systems zu verringern. Obwohl diese Maßnahme allein keine vollständige Sicherheit garantiert, hilft sie, automatisierte Port-Scans auf niedrigem Niveau zu vermeiden. Sie können den Standard-SSH-Port ändern, indem Sie die folgenden Schritte befolgen.

  1. Öffnen Sie die SSH-Konfigurationsdatei: Um eine neue Portnummer festzulegen, bearbeiten Sie die SSH-Konfigurationsdatei.

    sudo nano /etc/ssh/sshd_config

    Diese Datei bestimmt, wie sich der SSH-Daemon verhält, einschließlich auf welchem Port er lauscht.

  2. Einen benutzerdefinierten Port festlegen: Suchen Sie die folgende Zeile und ersetzen Sie sie durch Ihre gewünschte Portnummer. Zum Beispiel:

    Port 2222
    hinweis

    Wählen Sie eine Portnummer über 1024, die nicht bereits von einem anderen Dienst verwendet wird.

  3. Erlauben Sie den neuen Port durch die Firewall: Wenn Sie UFW verwenden, müssen Sie den Zugriff auf den neuen Port ausdrücklich erlauben. Andernfalls werden eingehende Verbindungen blockiert.

    sudo ufw allow 2222/tcp

    Die bestehende „ssh“-Regel gilt nur für Port 22—neue Regeln sind für benutzerdefinierte Ports erforderlich.

  4. SSH-Dienst neu starten: Um die Änderungen anzuwenden, starten Sie den SSH-Dienst neu.

    sudo systemctl restart ssh

    Wenn es einen Syntax- oder Konfigurationsfehler gibt, kann der Dienst möglicherweise nicht neu gestartet werden, also halten Sie vorher eine Testsitzung offen.

  5. Testen Sie die neue Portverbindung: Versuchen Sie, sich über den neuen Port zu verbinden.

    ssh -p 2222 user@server_ip
    tipp

    Wenn Sie keinen physischen Zugang zum Server haben oder remote arbeiten, halten Sie immer eine zweite SSH-Sitzung offen, bevor Sie Änderungen vornehmen. Dies hilft, versehentliche Sperrungen zu verhindern, falls etwas schiefgeht.

    warnung

    Wenn der neue Port nicht funktioniert und die Firewall-Regeln nicht aktualisiert wurden, könnten Sie den Zugriff auf den Server verlieren. Vorgehen Sie vorsichtig und überprüfen Sie jeden Schritt.

Obwohl diese Methode Brute-Force-Angriffe nicht vollständig ausschließt, hilft das Wechseln von häufig verwendeten Ports, Ihren SSH-Zugang weniger offensichtlich und schwerer angreifbar zu machen.

Wie man den SSH-Agent aktiviert und verwendet, um SSH-Schlüssel zu verwalten?

Der SSH-Agent ist ein Hilfsprogramm, das entwickelt wurde, um die Verwaltung von passwortgeschützten privaten Schlüsseln zu vereinfachen. Es speichert Ihren entschlüsselten privaten Schlüssel sicher im Speicher, nachdem Sie das Passwort einmal eingegeben haben, wodurch die Notwendigkeit entfällt, es für jede SSH-Verbindung erneut einzugeben. Dies verbessert die Benutzererfahrung, ohne die Sicherheit zu beeinträchtigen.

  1. Starten Sie den SSH-Agenten: Der SSH-Agent läuft pro Sitzung und startet als Hintergrundprozess im Speicher.

    eval "$(ssh-agent -s)"

    Dieser Befehl startet einen neuen Agentenprozess und setzt die Umgebungsvariable SSH_AUTH_SOCK.

  2. Fügen Sie Ihren privaten Schlüssel zum Agenten hinzu: Um Ihren geschützten privaten Schlüssel zum Agenten hinzuzufügen, führen Sie den folgenden Befehl aus.

    ssh-add ~/.ssh/id_rsa

    Dies lädt den Schlüssel in den Speicher, wodurch die passwortlose Nutzung für nachfolgende SSH-Verbindungen ermöglicht wird.

    Wenn sich Ihre Schlüsseldatei an einem anderen Ort befindet, geben Sie den Pfad an.

    ssh-add ~/.ssh/custom_key
  3. Angezeigte geladene Schlüssel: Um die derzeit im Agenten geladenen Schlüssel aufzulisten, führen Sie den folgenden Befehl aus.

    ssh-add –l

    Dies zeigt alle aktiven Schlüssel, die in der Sitzung verwendet werden können.

  4. Schlüssel vom Agent entfernen (Optional): Um einen bestimmten Schlüssel vom Agent zu entfernen, führen Sie den folgenden Befehl aus.

    ssh-add -d ~/.ssh/id_rsa

    Um alle Schlüssel zu entfernen, führen Sie den folgenden Befehl aus.

    ssh-add –D
  5. Automatisches Laden des SSH-Agenten beim Anmelden (Optional): In grafischen Umgebungen wie GNOME, KDE oder macOS wird der SSH-Agent automatisch gestartet. In rein CLI-Sitzungen fügen Sie die folgende Zeile zu Ihrer .bashrc- oder .profile-Datei hinzu, um sie beim Anmelden zu aktivieren, indem Sie den folgenden Befehl ausführen.

    eval "$(ssh-agent -s)" > /dev/null
    hinweis

    Der SSH-Agent speichert die Passphrase nur im Speicher. Nach einem Systemneustart müssen Sie ihn erneut eingeben.

    warnung

    Obwohl der Speicher des SSH-Agenten isoliert ist, können theoretisch andere Prozesse, die unter demselben Benutzer ausgeführt werden, darauf zugreifen. Für nicht vertrauenswürdige Umgebungen vermeiden Sie die Verwendung von Schlüsseln ohne Passphrase.

Die Verwendung des SSH-Agenten verbessert sowohl die Sicherheit als auch den Komfort, indem wiederholte Passphrase-Abfragen pro Sitzung vermieden werden. Es ist besonders nützlich für häufige Verbindungen, Automatisierungsskripte, Git-Workflows und CI/CD-Pipelines.

Wie man SSH-Tunneling verwendet, um sicher auf entfernte Dienste zuzugreifen?

SSH-Tunneling (Portweiterleitung) ist eine effektive Methode, um sicher auf Dienste zuzugreifen, die auf einem entfernten System von Ihrem lokalen Netzwerk aus laufen. Es schützt den Datenverkehr, indem er ihn durch die verschlüsselte SSH-Verbindung leitet. Diese Technik wird häufig verwendet, um sicher auf entfernte Datenbanken, Webschnittstellen, VNC-Sitzungen oder benutzerdefinierte Anwendungen zuzugreifen.

SSH-Tunneling kann auf drei Arten implementiert werden:

  1. Lokales Port-Forwarding (am häufigsten)
  2. Fernweiterleitung von Ports
  3. Dynamisches Port-Forwarding (SOCKS-Proxy)
tipp

SSH-Tunneling ist eine leichte, benutzerebene Alternative zu VPNs. Es funktioniert pro Sitzung anstatt systemweit. Portweiterleitung kann in einigen Unternehmensnetzwerken oder hinter NAT-Geräten eingeschränkt sein. Überprüfen Sie die Firewall-Regeln und die Einstellung AllowTcpForwarding auf dem SSH-Server.

SSH-Tunneling ist eine leichte, aber leistungsstarke Lösung für sicheren Remote-Zugriff. Es kombiniert Verschlüsselung, Flexibilität und Benutzerfreundlichkeit und macht es zu einem unverzichtbaren Werkzeug für Entwickler, Systemadministratoren und Datenanalysten in ihren täglichen Arbeitsabläufen.

Lokales Port-Forwarding

In diesem Abschnitt werden wir uns auf das lokale Port-Forwarding konzentrieren. Lokale Portweiterleitung ordnet einen lokalen Port auf Ihrem Rechner einem Dienst auf einem Remote-Server zu. Die allgemeine Syntax für SSH-Local-Port-Forwarding ist unten angegeben.

ssh -L [local_port]:[remote_host]:[remote_port] user@ssh_server

Example:

ssh -L 8080:localhost:80 [user@192.168.1.10](mailto:user@192.168.1.10)

In diesem Beispiel wird der Verkehr zu localhost:8080 auf Ihrem lokalen Computer an localhost:80 auf dem Remote-Server weitergeleitet.

Um auf den weitergeleiteten SSH-Dienst zuzugreifen, während die SSH-Verbindung aktiv ist, öffnen Sie Ihren Browser und navigieren Sie zu [http://localhost:8080](http://localhost:8080). Dies verbindet Sie sicher über einen verschlüsselten Tunnel mit Port 80 auf dem Remote-Server.

Verwendungsfälle für lokale Portweiterleitung sind unten aufgeführt.

  • Verbindung zu einer entfernten MySQL-Datenbank herstellen

    ssh -L 3307:localhost:3306 dbadmin@dbserver
  • Sicherer Zugriff auf webbasierte Dienste (z.B. Apache, Grafana):

    ssh -L 8081:127.0.0.1:3000 admin@remote_host
  • Sichere Remote-Desktop (RDP/VNC) Verbindungen

    ssh -L 5901:localhost:5901 user@remote_desktop

Sie können das Tunnel im Hintergrund ausführen, ohne eine Shell zu öffnen. Der folgende Befehl richtet den Tunnel stillschweigend ein und startet keine Shell-Sitzung.

ssh -fN -L 8080:localhost:80 user@remote_host

Fernweiterleitung von Ports

Remote-Portweiterleitung ermöglicht es einem entfernten System, den Zugriff auf seinen Port auf Ihrem lokalen System zu öffnen.

ssh -R 2222:localhost:22 user@remote_host

Dies leitet den eingehenden Datenverkehr zum Port 2222 des Remote-Hosts in den SSH-Dienst Ihrer lokalen Maschine weiter.

Dynamisches Port-Forwarding (SOCKS-Proxy)

Erstellt eine verschlüsselte Proxy-Verbindung für Ihren Browser oder Ihre Anwendungen.

ssh -D 1080 user@remote_host

Dies richtet einen SOCKS5-Proxy ein, der ideal ist, um Webverkehr in unsicheren Netzwerken zu sichern.

Wie überwacht und prüft man SSH-Zugriffsprotokolle?

Die regelmäßige Überwachung und Prüfung des SSH-Zugriffs ist von entscheidender Bedeutung für die Aufrechterhaltung der Systemsicherheit. Das Erkennen von bösartigen Anmeldeversuchen, fehlgeschlagenen Authentifizierungen und administrativen Aktionen erfordert eine aktive Überwachung der Systemprotokolle. Auf Ubuntu-Systemen werden SSH-bezogene Aktivitäten typischerweise in auth.log protokolliert oder mit journalctl auf Systemen, die systemd verwenden, verfolgt.

Sie können SSH-Zugriffsprotokolle mit den folgenden Methoden überwachen und überprüfen.

  • SSH-Anmeldeversuche über journalctl anzeigen: Auf modernen Ubuntu-Systemen können SSH-Protokolle über das systemd-Journal gefiltert und angezeigt werden.

    sudo journalctl -u ssh

    Dieser Befehl listet nur Protokolleinträge auf, die sich auf den SSH-Dienst beziehen.

    Verwenden Sie das --since-Flag, um Protokolle aus einem bestimmten Zeitraum anzuzeigen.

    sudo journalctl -u ssh --since "yesterday"
  • Untersuchen Sie das Authentifizierungsprotokoll direkt: Die traditionelle Protokolldatei /var/log/auth.log enthält Aufzeichnungen sowohl erfolgreicher als auch fehlgeschlagener Anmeldeversuche.

    sudo grep 'sshd' /var/log/auth.log

    Sie können Einträge mit Begriffen wie Akzeptiert, Fehlgeschlagen oder Ungültiger Benutzer filtern. Zum Beispiel, um nur erfolgreiche Anmeldungen aufzulisten, führen Sie den folgenden Befehl aus.

    grep 'Accepted' /var/log/auth.log
  • Verwenden Sie die Befehle who, w und last: Um aktuelle oder vergangene Benutzeranmeldesitzungen zu überprüfen, verwenden Sie die folgenden Befehle.

    • who: Zeigt die Benutzer an, die derzeit im System angemeldet sind.
    • w: Zeigt aktive Sitzungen zusammen mit ihrer Dauer und den Prozessen an.
    • last: Listet kürzlich angemeldete Benutzer mit den entsprechenden IP-Adressen in chronologischer Reihenfolge auf.
  • Aktivieren Sie ausführliche SSH-Protokollierung (Erweitert): Für eine erweiterte Überwachung können Sie das Protokollierungsniveau in der SSH-Konfigurationsdatei erhöhen.

    sudo nano /etc/ssh/sshd_config

    Ändern oder fügen Sie die folgende Zeile hinzu.

    text
    LogLevel VERBOSE

    Diese Einstellung protokolliert Details zur Vorab-Authentifizierung, wie z.B. versuchte Benutzernamen.

    Vergessen Sie nicht, den SSH-Dienst neu zu starten, um die Änderungen anzuwenden.

    sudo systemctl restart ssh
  • Echtzeitüberwachung: Um Protokolleinträge live zu überwachen, während sie auftreten, führen Sie den folgenden Befehl aus.

    sudo tail -f /var/log/auth.log

    Neue SSH-bezogene Protokolleinträge erscheinen in Echtzeit in Ihrem Terminal.

  • Integration mit Sicherheitstools: SSH-Zugriffsprotokolle können zentral verwaltet oder mit verschiedenen Sicherheitstools analysiert werden.

    • Fail2Ban: Überwacht Protokolle und sperrt IPs nach mehreren fehlgeschlagenen Anmeldeversuchen
    • Logwatch: Erstellt tägliche Zusammenfassungsberichte über die Protokollaktivität
    • SIEM-Tools (z.B. Splunk, Graylog, ELK Stack): Aggregiert Protokolle über mehrere Systeme hinweg für eine zentrale Analyse
warnung

SSH-Protokolle können sensible persönliche Daten enthalten. Sie sollten in Übereinstimmung mit Datenschutzvorschriften wie der DSGVO gespeichert und abgerufen werden.

Die Überwachung der SSH-Zugriffsprotokolle hilft Ihnen zu verstehen, wer sich verbunden hat, wann und wie, und ermöglicht eine frühzeitige Erkennung unbefugter Zugriffsversuche. Dieser Prüfungsprozess ist ein wesentlicher Bestandteil Ihrer Verteidigungsinfrastruktur.

Wie konfiguriert man SSH auf Ubuntu für den Remote-Desktop-Zugriff?

SSH kann nicht nur für terminalbasierten Remote-Zugriff verwendet werden, sondern auch, um grafische Anwendungen sicher aus der Ferne zu starten. Eine Methode dafür ist X11-Weiterleitung, die es ermöglicht, GUI-Anwendungen auf einem entfernten Ubuntu-System auf Ihrem lokalen Rechner anzuzeigen. Diese Funktion ist ideal für Systemadministratoren, Entwickler und Remote-Support-Personal, die Zugriff auf desktopbasierte Werkzeuge benötigen.

Sie können SSH für den Remote-Desktop-Zugriff konfigurieren, indem Sie die nächsten Schritte befolgen.

  1. Installieren Sie die erforderlichen Pakete auf dem Server: Stellen Sie sicher, dass die notwendigen Pakete für die X11-Weiterleitung auf dem entfernten Ubuntu-System installiert sind.

    sudo apt update
    sudo apt install xauth x11-apps
    • xauth: verwaltet die Authentifizierung von X11-Sitzungen.

    • x11-apps: enthält grundlegende grafische Testwerkzeuge.

  2. Aktivieren Sie X11-Weiterleitung in der SSH-Serverkonfiguration: Öffnen Sie die SSH-Serverkonfigurationsdatei, um die X11-Weiterleitung zu aktivieren.

    sudo nano /etc/ssh/sshd_config

    Stellen Sie sicher, dass die folgenden Zeilen vorhanden sind und nicht auskommentiert sind (kein # am Anfang):

    text
    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost yes

    Speichern Sie die Datei und starten Sie den SSH-Dienst neu.

    sudo systemctl restart ssh
    hinweis

    X11-Weiterleitung unterstützt nur GUI-Anwendungen, die vom angemeldeten Benutzer ausgeführt werden. Eine Desktop-Umgebung (wie GNOME oder XFCE) ist nicht erforderlich.

  3. Verbinden Sie sich vom Client mit aktivierter X11-Weiterleitung: Auf Ihrem lokalen System (typischerweise Linux oder macOS mit XQuartz) starten Sie eine SSH-Sitzung mit aktivierter X11-Weiterleitung.

    ssh -X user@remote_host

    Die -X-Flag aktiviert die X11-Weiterleitung im SSH-Client.

    Alternativ können Sie -Y für vertrauenswürdige Weiterleitung verwenden, die weniger restriktiv ist.

    ssh -Y user@remote_host
  4. GUI-Anwendungen aus der Ferne starten: Sobald Sie verbunden sind, können Sie eine grafische Anwendung aus der Ferne ausführen.

    xclock

    Dieser Befehl öffnet ein einfaches analoges Uhrenfenster. Wenn es auf Ihrem lokalen Bildschirm erscheint, funktioniert die Einrichtung korrekt.

  5. Verwenden Sie SSH für den vollständigen Remote-Desktop (VNC über SSH) / (Optional): Sie können den vollständigen Desktop-Zugriff sichern, indem Sie den VNC-Verkehr über SSH tunneln.

    ssh -L 5901:localhost:5901 user@remote_host

Verbinden Sie sich dann mit Ihrem lokalen VNC-Client sicher über SSH mit localhost:5901.

tipp

Best Practices und Tipps

  • X11-Weiterleitung ist sicher, aber ressourcenintensiv. Es kann über langsame Netzwerke schlecht abschneiden.
  • Der gesamte X11-Verkehr wird durch das SSH-Tunnel verschlüsselt—kein VPN ist erforderlich.
  • Verwenden Sie -Y (trusted forwarding) mit Vorsicht. Es wird nicht empfohlen, es auf untrusted Remote-Systemen zu verwenden.
warnung

Windows-Clients benötigen zusätzliche Software (wie Xming oder VcXsrv), um X11 zu unterstützen. Stellen Sie außerdem sicher, dass Ihr SSH-Client das -X-Flag unterstützt.

Die Verwendung von X11-Forwarding mit SSH bietet eine leichte, sichere Möglichkeit, grafisch mit entfernten Systemen zu interagieren. Es ist besonders hilfreich für Systemadministratoren, die gelegentlich GUI-Tools außerhalb des Terminals benötigen.

Wie richtet man SSH für den Dateitransfer mit SFTP oder SCP ein?

Das SSH-Protokoll ermöglicht nicht nur die sichere Ausführung von Remote-Befehlen, sondern bietet auch einen verschlüsselten und sicheren Kanal für den Dateitransfer. Diese Funktionalität wird durch zwei Hauptmethoden aktiviert:

  • SCP (Secure Copy Protocol): Schnelle und direkte Dateiübertragung über die Befehlszeile
  • SFTP (SSH File Transfer Protocol): Eine interaktive, FTP-ähnliche Datei-Management-Schnittstelle

Beide Methoden basieren auf SSH zur Benutzerauthentifizierung, wobei entweder Passwörter oder SSH-Schlüssel verwendet werden, und gewährleisten die Ende-zu-Ende-Verschlüsselung der Daten während der Übertragung.

Damit eine der beiden Methoden funktioniert, muss das Zielsystem den SSH-Server (openssh-server) ausführen. Zusätzlich sollte auf der Client-Maschine der OpenSSH-Client installiert sein.

sudo apt install openssh-server openssh-client

Bei Ubuntu-Desktop-Editionen ist der Client normalerweise vorinstalliert.

Dateien mit SCP übertragen

SCP verwendet eine ähnliche Syntax wie der cp-Befehl und ermöglicht es Ihnen, Dateien schnell auf einen Remote-Server zu kopieren oder von diesem zu kopieren.

Um eine Datei von Ihrem lokalen System an den Remote-Host mit scp zu senden, führen Sie den folgenden Befehl aus.

scp file.txt user@remote_host:/home/user/

Um eine Datei vom Remote-Server herunterzuladen, führen Sie den folgenden Befehl aus.

scp user@remote_host:/etc/hosts ./hosts_copy

Um ein Verzeichnis oder mehrere Dateien zu kopieren, verwenden Sie die -r-Option:

scp -r myfolder/ user@remote_host:/home/user/

Dateien mit SFTP verwalten

SFTP bietet eine ähnliche Schnittstelle wie FTP, aber der gesamte Datenverkehr wird über SSH getunnelt und verschlüsselt.

Um eine SFTP-Sitzung zu starten, führen Sie den folgenden Befehl aus.:

sftp user@remote_host

Grundlegende Befehle innerhalb einer SFTP-Sitzung sind unten aufgeführt.

  • ls: Listet Dateien auf dem Remote-Server auf
  • cd: Ändert das aktuelle Verzeichnis
  • get file.txt: Lädt eine Datei vom Remote-Server herunter
  • put file.txt: Lädt eine Datei auf den Remote-Server hoch
  • exit: Beendet die Sitzung

SFTP wird von vielen grafischen Clients unterstützt, wie zum Beispiel FileZilla (Linux, Windows, macOS), WinSCP (Windows) und Cyberduck (macOS). Typische Verbindungsparameter für SFTP-Clients

tipp

SCP kann fehlschlagen oder eine Zeitüberschreitung auftreten, wenn große Dateien über instabile Verbindungen übertragen werden. Für robustere Übertragungen sollten Sie rsync in Betracht ziehen.

Da sowohl SCP als auch SFTP auf SSH basieren, erfordern sie keine zusätzliche Einrichtung. Sie sind ideale Lösungen für Systemadministratoren, die sichere, schnelle und flexible Dateiübertragungsmöglichkeiten benötigen.

Wie man SSH für Automatisierung und Skripting verwendet?

SSH ist nicht nur nützlich für den manuellen Fernzugriff, sondern dient auch als leistungsstarkes Werkzeug zur Automatisierung von Aufgaben wie Systemadministration, Wartung, Bereitstellung und Datentransfer. Mit Skripten können Sie SSH-Verbindungen herstellen, um Befehle auszuführen, Skripte auszulösen und Dateien auf entfernten Systemen zu synchronisieren.

Diese Fähigkeit wird häufig in DevOps-, Systemadministrations- und CI/CD-Umgebungen eingesetzt.

Best Practices für die SSH-Automatisierung sind wie folgt.

  • Erzwingen Sie nur schlüsselbasierte Anmeldungen—verwenden Sie niemals Passwörter in der Automatisierung
  • Starten Sie Skripte mit set -e, um bei Fehlern anzuhalten
  • Verschlüsseln Sie private Schlüssel mit einer Passphrase und laden Sie sie mit ssh-agent
  • Protokolliere Ausgaben und Fehler mit 2>&1 | tee logfile.txt
tipp

Wenn Ihre Skripte sudo-Befehle ausführen müssen, stellen Sie sicher, dass der Benutzer sudo ohne Passwort (NOPASSWD) konfiguriert hat. Andernfalls wird die Automatisierung fehlschlagen, wenn nach einem Passwort gefragt wird.

Führen Sie einen Remote-Befehl nicht-interaktiv aus

Das einfachste Automatisierungsszenario besteht darin, einen einzigen Remote-Befehl über SSH auszuführen.

ssh user@remote_host "uptime"

Dieser Befehl gibt die Betriebszeit des entfernten Systems in Ihrem lokalen Terminal aus.

tipp

Schließen Sie den Befehl in doppelte Anführungszeichen ein, um zu verhindern, dass die Shell ihn lokal interpretiert.

Führen Sie mehrere Befehle aus der Ferne aus

Um mehrere Befehle in Folge mit dem &&-Operator auszuführen.

ssh user@remote_host "df -h && free -m && uname -r"

Jeder Befehl wird der Reihe nach ausgeführt. Der &&-Operator stellt sicher, dass der nächste Befehl nur ausgeführt wird, wenn der vorherige erfolgreich war.

SSH in einem Shell-Skript automatisieren

Sie können SSH-Befehle in ein Bash-Skript einfügen, um die Automatisierung zu ermöglichen.

#!/bin/bash
HOST="192.168.1.100"
USER="admin"
ssh ${USER}@${HOST} "sudo apt update && sudo apt upgrade -y"

Dieses Skript löst remote ein Paket-Update auf dem Zielserver aus.

Verwenden Sie SSH-Schlüssel-Authentifizierung in Skripten

Schlüsselbasierte Authentifizierung ist für die Automatisierung unerlässlich. Ohne sie werden Passwortaufforderungen den Prozess unterbrechen. Sie können die Konnektivität testen, bevor Sie fortfahren.

if ssh -q user@host exit; then
echo "Connected successfully"
else
echo "Connection failed"
fi

Verwenden Sie SSH-Multiplexing für bessere Leistung

Um sequenzielle SSH-Operationen zu beschleunigen, aktivieren Sie die Verbindungsfreigabe mit ControlMaster in Ihrer SSH-Konfiguration.

perl
Host remote_host
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 10m

Dies reduziert den Overhead, indem eine bestehende SSH-Sitzung wiederverwendet wird.

SSH mit Cron-Jobs kombinieren

Sie können Aufgaben mit cron automatisieren.

0 3 * * * /usr/bin/ssh user@remote_host "/usr/local/bin/backup.sh"

Dieser Cron-Job führt das Remote-Backup-Skript täglich um 3:00 Uhr aus.

Fazit

Skriptbasierte SSH-Automatisierung ermöglicht es Ihnen, Aufgaben wie Systemaktualisierungen, Backups, Dienstneustarts und Datensynchronisation durchzuführen—fern, sicher und nach Zeitplan.

SSH ist das Rückgrat für sicheren Remote-Zugriff und -Verwaltung auf Ubuntu. In diesem Leitfaden haben wir behandelt, wie man es einrichtet, seine Sicherheit verstärkt und seine Funktionalität für den täglichen Gebrauch verbessert.

Ob Sie nun einen einzelnen Server verwalten oder die Automatisierung über Dutzende orchestrieren, ein solides SSH-Setup hat direkte Auswirkungen auf die Sicherheit und Effizienz Ihres Systems. Sie können Ihre Verteidigung mit schlüsselbasierter Authentifizierung stärken, Brute-Force-Angriffe mit Fail2Ban verhindern und das SSH-Verhalten durch Tunneling und X11-Weiterleitung anpassen.

Im Herzen jeder starken Konfiguration liegen einfache, konsistente Praktiken. Schließen Sie unnötige Zugangspunkte, beschränken Sie Ports weise und überwachen Sie regelmäßig die Protokolle, um sowohl die externe Sicherheit als auch die interne Ordnung aufrechtzuerhalten.

Mit der Anleitung in diesem Einrichtungsleitfaden sind Sie nun in der Lage, SSH auf Ubuntu bewusster, sicherer und effektiver zu nutzen.

Starten Sie noch heute kostenlos mit Zenarmor