Kurz gesagt: sudo apt install openssh-server installiert den SSH-Dienst; ab Ubuntu 22.10 startet und aktiviert er sich bei der Installation von selbst, es bleibt also meist nichts mehr zu tun. Ist er schon installiert, antwortet aber nicht, hilft sudo systemctl enable --now ssh und, falls eine Firewall aktiv ist, sudo ufw allow OpenSSH.
Ubuntu Server hat SSH schon; Ubuntu Desktop nicht
Der Installer von Ubuntu Server bietet OpenSSH Server als Checkbox während der Einrichtung an, und fast jeder wählt sie aus – deshalb nimmt ein frischer Ubuntu-Server-VPS schon ab dem ersten Boot SSH-Verbindungen an, ohne weitere Schritte. Ubuntu Desktop installiert SSH dagegen nie, aus der (vernünftigen) Annahme, dass ein Desktop-Rechner standardmäßig keine eingehenden Logins annehmen muss – genau deshalb kommt die Frage, wie man SSH aktiviert, überhaupt erst dort auf.
- 1openssh-server installieren
Ubuntu (jede Version) sudo apt update sudo apt install -y openssh-serverDas installiert den Dienst
ssh(sein systemd-Einheitenname) und densshd-Daemon selbst. Prüfe, ob er überhaupt da ist:Ubuntu dpkg -l | grep openssh-server - 2Prüfen, ob er läuft
Ubuntu systemctl status sshactive (running)heißt, er funktioniert bereits – nichts weiter zu tun. Steht dortinactive (dead)odercould not be found, weiter zum nächsten Schritt. - 3Aktivieren und starten
Ubuntu sudo systemctl enable --now sshenablesorgt dafür, dass er ab jetzt bei jedem Boot startet;--nowstartet ihn außerdem sofort, du musst also nicht erst neu starten, um zu sehen, ob es funktioniert hat. - 4Die Firewall öffnen, falls eine aktiv ist
Ubuntu mit ufw sudo ufw status sudo ufw allow OpenSSHOpenSSHist hier ein Anwendungsprofil, das ufw mitbringt, kein Paketname zum Eintippen – es steht für TCP-Port 22. Zeigtufw status„inactive“, gibt es nichts zu öffnen, und dieser Schritt tut nichts, was völlig in Ordnung ist. - 5Verbinden
von einer anderen Maschine ssh deinbenutzername@SERVER_IPHalte deine aktuelle Sitzung (Konsole, oder was dich überhaupt erst auf die Maschine gebracht hat) offen, bis das klappt, falls Schritt 4 irgendwo eine Regel übersehen hat – etwa eine separate Netzwerk-Firewall oder Security Group des Cloud-Anbieters, von der ufw nichts weiß.
ssh, sshd oder ssh.socket: die Ubuntu-Version zählt
| Ubuntu-Version | Dienstname | Hinweise |
|---|---|---|
| 22.04 und früher | ssh | sshd lauscht selbst auf dem Port, startet beim Boot über den Dienst |
| 22.10 bis 23.10 | ssh.service und ssh.socket | Übergangsphase; beide existieren, der Service übernimmt meist noch das Lauschen |
| 24.04 und neuer | ssh.socket | Socket-aktiviert: systemd lauscht auf dem Port und startet sshd bei der ersten Verbindung |
Ab 24.04 braucht eine Portänderung oder ein Config-Reload sudo systemctl daemon-reload && sudo systemctl restart ssh.socket statt eines Neustarts von ssh selbst, sonst antwortet still die alte Einstellung weiter. Nur um den Dienst zum ersten Mal zu aktivieren, funktioniert systemctl enable --now ssh auf jeder Version: systemd löst den Alias auf die jeweils zutreffende Einheit auf.
Bestätigen, dass sshd wirklich lauscht
sudo ss -tlnp | grep ssh
sudo sshd -T | grep -i ^portss zeigt, was wirklich und gerade jetzt an einem Port gebunden ist, egal was systemctl status behauptet; sshd -T gibt die effektive Konfiguration aus, die sshd nutzen würde – das fängt auch eine zweite, vergessene Port-Zeile in einer Drop-in-Datei unter /etc/ssh/sshd_config.d/ ab, die Port 22 wieder öffnet, obwohl du ihn eigentlich ändern wolltest.
Passwort-Login ist standardmäßig an – abschalten, sobald der Key funktioniert
Eine frische openssh-server-Installation akzeptiert Passwort-Logins, was für die erste Verbindung in Ordnung ist, aber nicht dauerhaft auf einem vom ganzen Internet erreichbaren Server bleiben sollte. Richte zuerst einen Schlüssel ein:
ssh-keygen -t ed25519 -C "du@example"
ssh-copy-id deinbenutzername@SERVER_IPDann Passwort-Logins auf dem Server abschalten, in /etc/ssh/sshd_config oder einer Drop-in-Datei:
PasswordAuthentication nosudo sshd -t && sudo systemctl restart ssh # 24.04: stattdessen ssh.socket neu startenTeste den Key-Login in einem neuen Terminal, bevor du das aktuelle schließt – dieselbe Regel wie bei einer Portänderung, aus demselben Grund. Die komplette Absicherung über diese eine Einstellung hinaus, inklusive fail2ban und dem Abschalten des Root-Logins, steht in SSH-Zugriff absichern (engl.).
Installiert und läuft, aber Verbindungen schlagen trotzdem fehl
| Symptom | Wahrscheinliche Ursache | Siehe |
|---|---|---|
| Connection refused | Firewall zwischen dir und dem Server, oder sshd an die falsche Adresse gebunden | SSH: Connection refused (engl.) |
| Connection timed out | Es antwortet gar nichts – eine Firewall auf Netzwerkebene oder falsche IP | SSH connection timed out (engl.) |
| Permission denied (publickey) | Key-Auth ist an, aber der Schlüssel ist nicht installiert oder wird nicht angeboten | Permission denied (publickey) (engl.) |
| Funktioniert, aber auf einem anderen Port | Der Port wurde schon mal geändert; prüfe sshd -T | SSH-Port 22 (engl.) |
Ein Hinweis zu WSL und Containern
Alles oben gilt für einen echten Ubuntu-Server oder eine VM. Innerhalb von WSL oder einem Docker-Container funktioniert systemctl womöglich gar nicht, weil keiner der beiden unbedingt systemd als PID 1 ausführt – sudo service ssh start ist dort der Ausweg, und es lohnt sich ohnehin selten, einen SSH-Server in einem Container zu betreiben, da der Host schon einen Zugangsweg bietet.
Häufige Fragen
Wie aktiviere ich SSH unter Ubuntu?
sudo apt install -y openssh-server installiert den Dienst und startet und aktiviert ihn ab Ubuntu 22.10 automatisch. Ist er schon installiert, aber nicht gestartet, startet und aktiviert sudo systemctl enable --now ssh ihn sofort und für jeden künftigen Boot.
Ist SSH bei Ubuntu Server schon aktiviert?
In der Regel ja – der Ubuntu-Server-Installer bietet OpenSSH Server als Checkbox während der Einrichtung an, und die meisten wählen sie aus. Ubuntu Desktop installiert SSH dagegen nie standardmäßig.
SSH ist aktiviert, aber ich komme trotzdem nicht rein – warum?
Prüfe in dieser Reihenfolge: ob der Dienst wirklich läuft (systemctl status ssh), ob eine lokale Firewall ihn erlaubt (sudo ufw allow OpenSSH) und ob eine Firewall oder Security Group außerhalb des Servers Port 22 schon blockiert, bevor er überhaupt bei ufw ankommt.