Umfassende SSH-Einrichtungsanleitung für Ubuntu: Installation, Sicherheits-Härtung, erweiterte Konfiguration und Fehlersuche

目次

1. Einführung

Die Konfiguration von SSH unter Ubuntu ist essenziell für die Verwaltung entfernter Server. SSH (Secure Shell) ist ein Protokoll, das sichere, verschlüsselte Kommunikation ermöglicht, sodass Benutzer Server remote zugreifen, Befehle ausführen und Dateien übertragen können.

Dieser Artikel erklärt, wie man SSH unter Ubuntu konfiguriert – von den grundlegenden Installationsschritten bis zu erweiterten Sicherheitsmaßnahmen.

1.1 Warum SSH unter Ubuntu konfigurieren?

1.1.1 Was ist SSH?

SSH (Secure Shell) ist ein Protokoll, das sichere Kommunikation über ein Netzwerk ermöglicht. Es wird häufig zum Einloggen in entfernte Server, zum Übertragen von Dateien und zum Tunneln (Port‑Forwarding) verwendet. Im Gegensatz zu traditionellen Telnet‑ oder FTP‑Verbindungen verschlüsselt SSH sämtliche Kommunikation und bietet damit starke Sicherheit.

1.1.2 Wann SSH unter Ubuntu benötigt wird

Typische Szenarien, in denen SSH zur Verwaltung von Ubuntu aus der Ferne eingesetzt wird, umfassen:

  • Cloud‑Server‑Administration : Linux‑Server auf AWS, GCP, Vultr und anderen Plattformen werden in der Regel über SSH erreicht.
  • Remote‑Operationen in LAN‑Umgebungen : Zugriff auf interne Server oder Entwicklungsmaschinen aus der Ferne.
  • Verwaltung von IoT‑Geräten : Fernsteuerung eingebetteter Systeme wie Raspberry Pi.

Standardmäßig ist der SSH‑Server unter Ubuntu deaktiviert, daher muss er manuell installiert und konfiguriert werden, um SSH‑Zugriff zu ermöglichen.

2. Grundlegende SSH‑Konfiguration

Um SSH unter Ubuntu zu nutzen, muss der SSH‑Server (OpenSSH) installiert und korrekt konfiguriert werden. Dieser Abschnitt erklärt, wie man SSH installiert, Grundeinstellungen anpasst, die Firewall konfiguriert und sich mit dem Server verbindet.

2.1 Installation und Start von OpenSSH

2.1.1 Was ist OpenSSH?

OpenSSH (Open Secure Shell) ist eine Open‑Source‑Implementierung des SSH‑Protokolls. Es unterstützt Remote‑Verbindungen, sichere Dateiübertragungen (SCP und SFTP) sowie Port‑Forwarding.

2.1.2 Installation von OpenSSH

Ubuntu enthält standardmäßig keinen SSH‑Server, daher installieren Sie ihn mit dem folgenden Befehl:

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

Damit werden die Paketlisten aktualisiert und der OpenSSH‑Server installiert.

2.1.3 Starten von SSH und Aktivieren des automatischen Starts

Nach der Installation starten Sie den SSH‑Server und aktivieren den automatischen Start:

sudo systemctl enable --now ssh

Die Option enable sorgt dafür, dass SSH beim Systemstart automatisch gestartet wird.

2.1.4 Überprüfen des SSH‑Status

Verifizieren Sie, dass SSH läuft:

systemctl status ssh

Wenn die Ausgabe active (running) zeigt, funktioniert SSH einwandfrei:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago

Zeigt sie inactive (dead) oder failed an, starten Sie SSH manuell:

sudo systemctl start ssh

2.2 Konfiguration der Firewall (UFW)

Ubuntu enthält eine einfache Firewall namens ufw (Uncomplicated Firewall). Sie müssen SSH‑Verbindungen durch diese Firewall zulassen.

2.2.1 Überprüfen des UFW‑Status

sudo ufw status

Beispielausgabe (inactive):

Status: inactive

Beispielausgabe (active):

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Zulassen von SSH

sudo ufw allow ssh

Oder explizit:

sudo ufw allow 22/tcp

2.2.3 Aktivieren von UFW

sudo ufw enable

2.2.4 Überprüfen der UFW‑Regeln

sudo ufw status verbose

Beispiel:

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

2.3 Grundlegende SSH‑Verbindungsmethoden

Sobald SSH läuft, verbinden Sie sich von einem Client‑Rechner.

2.3.1 Verbindung von Linux/macOS

ssh username@server-ip-address

Beispiel:

ssh user@192.168.1.100

Bei der ersten Verbindung kann eine Sicherheitswarnung angezeigt werden:

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

Geben Sie yes ein, um fortzufahren.

2.3.2 Verbindung von Windows aus

Sie können PowerShell oder PuTTY verwenden.

Verwendung von PowerShell (Windows 10+ enthält SSH):

ssh username@server-ip-address

Verwendung von PuTTY:

  1. Laden Sie PuTTY von der offiziellen Seite herunter.
  2. Öffnen Sie PuTTY und geben Sie die Server-IP in Host Name (or IP address) ein.
  3. Wählen Sie SSH als Verbindungstyp.
  4. Klicken Sie auf Open und melden Sie sich an.

Fazit

Dieser Abschnitt behandelte die Grundlagen der Einrichtung von SSH auf Ubuntu:

  • Wie man OpenSSH installiert und startet
  • Wie man SSH-Verbindungen mit UFW erlaubt
  • Wie man sich von Linux/macOS und Windows aus verbindet

3. SSH-Sicherheit verstärken

SSH ist leistungsfähig, aber wenn es mit den Standardeinstellungen belassen wird, erhöht das das Sicherheitsrisiko. Angreifer versuchen häufig Brute-Force-Anmeldeversuche oder Port-Scans. Die Verstärkung der SSH-Sicherheit ist unerlässlich.

3.1 Root-Login deaktivieren

Der Root-Login bietet vollständige Systemkontrolle und ist ein Hauptziel für Angreifer. Das Deaktivieren erhöht die Sicherheit.

3.1.1 Schritte

  1. Bearbeiten Sie die SSH-Konfigurationsdatei:
    sudo nano /etc/ssh/sshd_config
    
  1. Ändern Sie die Zeile zu:
    PermitRootLogin no
    
  1. Starten Sie SSH neu:
    sudo systemctl restart ssh
    
  1. Bestätigen Sie die Änderung:
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Wenn die Ausgabe PermitRootLogin no lautet, ist die Einstellung übernommen.

3.2 Passwort-Authentifizierung deaktivieren und Schlüssel-Authentifizierung verwenden

Die Authentifizierung mit öffentlichen Schlüsseln ist sicherer als Passwörter und reduziert das Risiko von Brute-Force-Angriffen.

3.2.1 SSH-Schlüssel erstellen

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Dies erzeugt zwei Dateien:

  • id_rsa (privater Schlüssel) — lokal aufbewahren, niemals teilen
  • id_rsa.pub (öffentlicher Schlüssel) — auf den Server hochladen

3.2.2 Öffentlichen Schlüssel hochladen

ssh-copy-id username@server-ip-address

3.2.3 Passwort-Authentifizierung deaktivieren

sudo nano /etc/ssh/sshd_config

Bearbeiten Sie:

PasswordAuthentication no

Starten Sie SSH neu:

sudo systemctl restart ssh

3.3 SSH-Zugriff nur für bestimmte Benutzer erlauben

Um die SSH-Sicherheit zu erhöhen, können Sie den Zugriff einschränken, sodass nur bestimmte Benutzer sich anmelden dürfen.

3.3.1 Konfigurationsschritte

  1. Öffnen Sie die SSH-Konfigurationsdatei /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Fügen Sie die Benutzer hinzu, die per SSH Zugriff haben dürfen:
    AllowUsers username1 username2
    
  1. Starten Sie SSH neu, um die Einstellungen zu übernehmen:
    sudo systemctl restart ssh
    

3.4 Ändern des SSH-Ports

Da Port 22 häufig von Angreifern ins Visier genommen wird, kann das Ändern des Standardports die Sicherheit erhöhen.

3.4.1 Konfigurationsschritte

  1. Öffnen Sie die SSH-Konfigurationsdatei:
    sudo nano /etc/ssh/sshd_config
    
  1. Ändern Sie die Port-Einstellung, z.B.:
    Port 2200
    
  1. Starten Sie SSH neu:
    sudo systemctl restart ssh
    

3.4.2 Firewall-Einstellungen aktualisieren

Wenn Sie den Port ändern, aktualisieren Sie UFW:

sudo ufw allow 2200/tcp

Überprüfen Sie die neue Regel:

sudo ufw status

3.5 Brute-Force-Angriffe mit Fail2Ban verhindern

Fail2Ban erkennt fehlgeschlagene Anmeldeversuche und blockiert die angreifende IP für eine bestimmte Zeit.

3.5.1 Fail2Ban installieren

sudo apt install fail2ban -y

3.5.2 Konfigurationsdatei erstellen

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Datei öffnen:

sudo nano /etc/fail2ban/jail.local

Einstellungen ändern:

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Fail2Ban neu starten

sudo systemctl restart fail2ban

3.5.4 Bannliste prüfen

sudo fail2ban-client status sshd

Fazit

Dieser Abschnitt erklärte Methoden zur Verbesserung der SSH-Sicherheit:

  • Root-Login deaktivieren
  • Passwort-Authentifizierung deaktivieren und Schlüssel-Authentifizierung aktivieren
  • SSH-Zugriff auf bestimmte Benutzer beschränken
  • Den SSH-Port ändern
  • Fail2Ban verwenden, um unbefugte Versuche zu blockieren

Die Implementierung dieser Einstellungen hilft, eine sichere SSH-Umgebung zu schaffen.

4. Erweiterte SSH-Konfiguration

Nachdem die grundlegende SSH-Konfiguration und Sicherheits-Härtung abgeschlossen sind, können Sie zu erweiterten Funktionen für verbesserte Flexibilität und Sicherheit übergehen. Dieser Abschnitt behandelt die Verwaltung von ssh.socket (Ubuntu 22.10+), SSH-Tunnel, das Lauschen auf mehreren Ports und IP-basierte Zugriffskontrolle.

4.1 Verwendung von ssh.socket unter Ubuntu 22.10+

In Ubuntu 22.10+ kann SSH von ssh.socket anstelle von ssh.service verwaltet werden. Diese socket-basierte Aktivierung startet SSH nur bei Bedarf und spart Systemressourcen.

4.1.1 ssh.socket-Status prüfen

sudo systemctl status ssh.socket

Beispielausgabe (aktiviert):

● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 ssh.socket aktivieren oder deaktivieren

Socket aktivieren:

sudo systemctl enable --now ssh.socket

Zurück zum klassischen ssh.service wechseln:

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 SSH-Tunneling (Port-Weiterleitung)

SSH-Tunneling stellt sichere Kommunikationskanäle zwischen lokalen und entfernten Systemen her.

4.2.1 Lokale Port-Weiterleitung

Nützlich, um sicher eine Verbindung zu entfernten Datenbanken oder internen Diensten herzustellen.

Beispiel: Zugriff auf einen entfernten MySQL-Server auf Port 3306

ssh -L 3306:localhost:3306 username@server-ip-address

4.2.2 Reverse Port-Weiterleitung

Lokale Dienste über einen entfernten Server bereitstellen.

Beispiel: Lokalen Webserver auf Remote-Port 8080 veröffentlichen

ssh -R 8080:localhost:80 username@server-ip-address

4.2.3 Dynamische Port-Weiterleitung (SOCKS-Proxy)

SSH als SOCKS-Proxy für anonymes Surfen verwenden.

ssh -D 1080 username@server-ip-address

4.3 Auf mehreren Ports lauschen

SSH kann auf mehr als einem Port lauschen, um Flexibilität in verschiedenen Netzwerkumgebungen zu bieten.

4.3.1 Konfigurationsschritte

  1. /etc/ssh/sshd_config bearbeiten:
    sudo nano /etc/ssh/sshd_config
    
  1. Mehrere Port-Zeilen hinzufügen:
    Port 22
    Port 2200
    
  1. SSH neu starten:
    sudo systemctl restart ssh
    
  1. Den neuen Port mit UFW zulassen:
    sudo ufw allow 2200/tcp
    

4.4 SSH nur von bestimmten IP-Adressen zulassen

Die Beschränkung des SSH-Zugriffs nach IP-Adresse bietet eine starke Sicherheitskontrolle.

4.4.1 /etc/hosts.allow konfigurieren

sudo nano /etc/hosts.allow

Erlaubte IP-Adresse hinzufügen:

sshd: 192.168.1.100

4.4.2 /etc/hosts.deny konfigurieren

sudo nano /etc/hosts.deny

Alle anderen ablehnen:

sshd: ALL

Fazit

Dieser Abschnitt behandelte fortgeschrittene SSH-Konfigurationsthemen:

  • Verwaltung von ssh.socket in Ubuntu 22.10+
  • Verwendung von SSH-Tunneln (Port-Weiterleitung)
  • Auf mehreren SSH-Ports lauschen
  • SSH-Zugriff auf bestimmte IP-Adressen beschränken

Die Anwendung dieser Konfigurationen erhöht sowohl die Sicherheit als auch die Benutzerfreundlichkeit.

5. SSH-Fehlerbehebung

Selbst bei korrekter Konfiguration können SSH-Verbindungen gelegentlich fehlschlagen. Dieser Abschnitt erklärt häufige SSH-Probleme und deren Lösungen.

5.1 Wenn SSH keine Verbindung herstellen kann

Wenn SSH Connection refused zurückgibt oder ein Timeout auftritt, können mögliche Ursachen Service-Probleme, Port-Fehlkonfiguration oder Firewall-Einschränkungen sein.

5.1.1 SSH-Dienst läuft nicht

sudo systemctl status ssh

Lösung:

  • Wenn inactive oder failed, SSH neu starten:
    sudo systemctl restart ssh
    
  • Autostart aktivieren:
    sudo systemctl enable ssh
    

5.1.2 SSH-Port nicht geöffnet

ssh -p 2200 username@server-ip-address

Offene Ports prüfen:

sudo netstat -tulnp | grep ssh

Oder:

ss -tulnp | grep ssh

5.1.3 Firewall (UFW) blockiert SSH

sudo ufw status

SSH zulassen:

sudo ufw allow 22/tcp

Wenn ein benutzerdefinierter Port verwendet wird:

sudo ufw allow 2200/tcp

5.2 Authentifizierungsfehler

5.2.1 Falscher Benutzername oder falsches Passwort

ssh username@server-ip-address

5.2.2 Öffentlicher Schlüssel nicht korrekt installiert

cat ~/.ssh/authorized_keys

Stellen Sie sicher, dass er mit dem lokalen id_rsa.pub übereinstimmt.

5.2.3 Falsche Berechtigungen im .ssh‑Verzeichnis

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Stellen Sie außerdem sicher:

chmod 755 /home/username

5.3 Instabile SSH‑Verbindungen oder unerwartete Trennungen

5.3.1 ClientAliveInterval anpassen

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

5.3.2 Lokale Client‑Einstellungen anpassen

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 SSH‑Protokolle anzeigen

5.4.1 Echtzeit‑Protokolle anzeigen

sudo journalctl -u ssh -f

5.4.2 Frühere Protokolle anzeigen

sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log

Fazit

Dieser Abschnitt erklärte häufige SSH‑Probleme und wie man sie behebt:

  • Überprüfen Sie, ob der SSH‑Dienst läuft
  • Überprüfen Sie offene Ports
  • Firewall‑Einstellungen prüfen
  • Stellen Sie sicher, dass die Schlüssel‑Authentifizierung korrekt ist
  • Zeitüberschreitungs‑ und Trennungsprobleme beheben
  • SSH‑Protokolle analysieren

Die meisten SSH‑Probleme entstehen durch Fehlkonfigurationen oder Netzwerkbeschränkungen. Verwenden Sie diese Fehlersuchschritte, um Probleme effizient zu lösen.

6. FAQ (Häufig gestellte Fragen)

Dieser Abschnitt beantwortet häufige Fragen zur Nutzung und Konfiguration von SSH.

6.1 Wie behebt man SSH‑Zeitüberschreitungsprobleme?

6.1.1 Serverseitige Einstellungen

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

6.1.2 Clientseitige Einstellungen

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Was tun, wenn Sie Ihr SSH‑Passwort vergessen haben?

6.2.1 Wenn Sie physischen Zugriff haben

  1. In den Single‑User‑Modus booten (wählen Sie recovery mode im GRUB)
  2. Passwort zurücksetzen:
    passwd username
    
  1. Das System neu starten

6.2.2 Wenn physischer Zugriff nicht möglich ist (Cloud‑VPS)

  • Verwenden Sie die vom Hosting‑Anbieter bereitgestellte VPS‑Konsole
  • Verwenden Sie die Authentifizierung mit öffentlichem Schlüssel

6.3 Wie verwendet man SSH unter Windows?

6.3.1 Verwendung von PowerShell

ssh username@server-ip-address

6.3.2 Verwendung von PuTTY

  1. Laden Sie PuTTY herunter und installieren Sie es
  2. Geben Sie die Server‑IP‑Adresse in Host Name ein
  3. Wählen Sie SSH als Verbindungstyp
  4. Melden Sie sich mit Benutzername und Passwort an

6.4 Wie konfiguriert man SSH auf Ubuntu WSL?

6.4.1 SSH‑Server installieren

sudo apt update && sudo apt install openssh-server

6.4.2 SSH‑Einstellungen ändern

PasswordAuthentication yes

Starten Sie SSH manuell (WSL verwendet kein systemd):

sudo service ssh start

6.5 Zusätzliche Sicherheits‑Best‑Practices

6.5.1 Fail2Ban verwenden

sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban

6.5.2 SSH‑Port ändern

Port 2200
sudo ufw allow 2200/tcp

6.6 Wie überwacht man SSH‑Protokolle in Echtzeit?

sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh

6.7 Tipps für eine bequemere Nutzung von SSH

6.7.1 .ssh/config für einfache Anmeldungen verwenden

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

Dann verbinden Sie sich mit:

ssh myserver

6.7.2 ssh-agent verwenden

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Fazit

Dieser Abschnitt fasste häufig gestellte Fragen zu SSH zusammen:

  • So beheben Sie SSH-Timeout-Probleme
  • So stellen Sie ein vergessenes Passwort wieder her
  • So verwenden Sie SSH unter Windows und WSL
  • Best Practices für die Sicherheit
  • So überprüfen Sie SSH-Protokolle
  • Tipps, um SSH mit .ssh/config bequemer zu machen

Durch die Anwendung dieser Techniken können Sie eine sichere und effiziente SSH-Umgebung aufbauen und Remote-Server reibungslos verwalten.