SSH - Einführung
Terminal
Für SSH brauchst du die Grundlagen im Terminal: Befehle eintippen, dich in Ordnern bewegen, Dateien anlegen und bearbeiten. Nach dem SSH-Login arbeitest du nämlich nur noch im Terminal – auf einem anderen Rechner. Alles Wichtige dazu, inklusive einer Übersicht der wichtigsten Befehle, findest du hier: Terminal-Grundlagen.
SSH
Was ist SSH?
SSH (Secure Shell) ist wie ein sicherer Tunnel zu einem anderen Rechner. Du kannst dich damit auf einem entfernten (engl. remote) Computer einloggen und ihn benutzen, als wärst du direkt davor. Damit du dich auf dem entfernten Computer anmelden kannst, muss der Benutzer existieren und der Rechner für dich erreichbar sein. Außerdem muss dort ein SSH-Server laufen (unter Ubuntu: sudo apt install openssh-server, Standard-Port 22). In der Schule nutzen wir dafür einen extra WLAN-Router, weil das Schul-WLAN den Zugang blockiert. Auch wenn wir nicht mit dem Internet verbunden wären, könnten wir so in einem kleinen eigenen Netzwerk (Intranet) arbeiten.
Voraussetzungen
- Stelle sicher, dass der openssh-server auf dem Host installiert ist. Falls nicht, installiere
openssh-serverper apt, das geht so. Führe vorhersudo apt updateaus, um die Paketlisten zu aktualisieren. Mitsudo apt upgradekannst du installierte Software übrigens aktualisieren. Mache das ab und an, wenn du Zeit hast. - Du brauchst die Zugangsdaten zu dem Host, also dem Rechner, mit dem du dich verbinden möchtest.
So funktioniert’s:
Wenn die SSH-Einstellungen des Hosts es zulassen, kannst du dich direkt mit Benutzername und Adresse (IP-Adresse oder Domainname/FQDN) per SSH an einem anderen Computer anmelden. Wie es sicherer und bequemer geht, erfährst du weiter unten: SSH-Schlüssel erstellen und verteilen, Konfigurationsdatei mit Aliasen und SSH-Einstellungen am Server.
| |
Beispiel:
| |
Mit exit (oder Strg + D) meldest du dich wieder ab.
Mit einem Raspberry Pi im lokalen Netz verbinden
Bei unseren Raspberry Pis kannst du dich so anmelden: ssh user@rpi.local
Beim ersten Mal: Fingerprint prüfen
Beim ersten Verbinden wirst du gefragt, ob du dem Rechner vertraust. Dabei wird ein Fingerprint angezeigt – eine Art Fingerabdruck des Hosts. Bevor du mit yes bestätigst, solltest du ihn eigentlich vergleichen. Am Host zeigt dieser Befehl ihn an:
| |
Stimmen beide überein, tippe yes. Dein Rechner merkt sich den Host in ~/.ssh/known_hosts und fragt danach nicht mehr.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Der Host meldet sich mit einem anderen Fingerprint als beim letzten Mal. Das passiert z. B., wenn der Rechner neu installiert wurde – oder wenn sich jemand dazwischenschaltet. Bist du sicher, dass alles in Ordnung ist, löschst du den alten Eintrag mit ssh-keygen -R 192.168.0.10.
Wie kommst du an die IP-Adresse?
Du bist der Client und möchtest dich mit dem Host verbinden. Der Host ist also der Rechner, dessen IP-Adresse du benötigst. Das geht u.a. so:
- Sorge dafür, dass beide Geräte, Client und Host, im gleichen Netzwerk (oft WLAN) sind.
- Gib am Host
hostname -I(alternativip abzw.ip addr) ein und finde die IP-Adresse. Beiip amusst du eine Zeile wieinet 192.168.0.10/24suchen.192.168.0.10wäre in diesem Fall die IP-Adresse. (Am Mac:ipconfig getifaddr en0, unter Windows:ipconfig.) - Verbinde dich wie oben beschrieben per SSH.
Server im Internet erreichst du meist über einen Namen, z. B. ssh jmueller@server.example.org. Das funktioniert, weil diese Rechner (Server) eine öffentliche, feste IP-Adresse haben und das DNS den Namen in diese Adresse übersetzt.
Raspberry Pis registrieren.
Wenn wir Raspberry Pis anmelden, haben diese keinen Bildschirm. Wir kennen aber die Hostnamen unserer Raspis, also gehe wie folgt vor:
- Fahre genau einen Raspberry Pi hoch.
- Führe an deinem Rechner
ssh user@rpi.localaus. - Wenn du mit dem Raspi verbunden bist, lies die IP-Adresse mit
hostname -Iaus. Notiere diese IP physisch auf dem Raspberry Pi mit einem Ettiket. - Trage diesen Host in deiner Konfigurationsdatei mit Aliasen ein, bspw. mit dem Alias
rpi_12für den Raspberry mit der Nummer 12. Dann kannst du dich zukünftig einfach mitssh rpi_12an diesem Raspi anmelden.
Aufgaben
- Logge dich via SSH auf dem gemeinsamen Ubuntu-Rechner ein.
- Erstelle einen Ordner mit deinem Namen.
- Lege eine Textdatei in diesem Ordner an: z. B.
steckbrief.txt. Das kannst du mit einem einfachen Editor wienanomachen:nano steckbrief.txtöffnet die Datei (und legt sie an, falls es sie noch nicht gibt). Unten im Fenster stehen die wichtigsten Tastenkürzel,^steht dabei fürStrg. - Schreibe mit
nanoetwas über dich hinein. - Beende nano mit
Strg + X, bestätige das Speichern mitY(bzw.J) undEnter. - Überprüfe auf dem Rechner, auf dem du dich per SSH angemeldet hast, per GUI (graphical user interface, grafische Benutzeroberfläche), ob deine Datei so entstanden ist wie geplant.
Python-Skripte via Terminal ausführen
- Erstelle eine Datei mit der Endung
.py, z. B.hallo.py. - Öffne sie mit
nano hallo.pyund schreibe z. B.:1print("Hallo aus dem Terminal!") - Speichern mit
Strg + O, schließen mitStrg + X. - Ausführen mit:
1python3 hallo.py
Weiterführende Übungen
- Lade dir eine SSH-App auf dein Smartphone, bspw. Termius. Logge dich damit auf dem Notebook ein und versuche damit zu arbeiten.
- Finde weitere nützliche Terminal-Befehle, mit denen man bspw. Dateien kopieren, verschieben, Rechte an der Datei ändern kann etc.
- Kopiere eine Datei von deinem Rechner auf den Host:
scp hallo.py jmueller@192.168.0.10:~/ - Du hast richtig Bock?
- Installiere zsh und oh-my-zsh. (Dafür benötigst du Internet-Zugang an deinem Rechner.)
- Lerne Shell-Scripting.
Remote Development mit VS Code
Mit der Erweiterung Remote - SSH öffnest du Ordner auf dem Host direkt in VS Code. Editor, Terminal und Dateibaum arbeiten dann auf dem entfernten Rechner – so, als säßest du davor.
- Installiere in VS Code die Erweiterung Remote - SSH (von Microsoft).
- Wähle in der Seitenleiste Remote - SSH und dann
Remote-SSH: Connect to Host...und gibbenutzername@ip-adresseein. - Öffne im neuen Fenster über Datei → Ordner öffnen einen Ordner auf dem Host.
Hosts aus deiner config-Datei erscheinen automatisch in der Auswahl. Anleitung: https://code.visualstudio.com/docs/remote/ssh
SSH-Schlüssel erstellen und verteilen
Statt mit Passwort kannst du dich mit einem Schlüsselpaar anmelden – das ist sicherer und bequemer.
- Privater Schlüssel (
~/.ssh/id_ed25519): bleibt auf deinem Rechner. Niemals weitergeben! - Öffentlicher Schlüssel (
~/.ssh/id_ed25519.pub): kommt auf jeden Host, auf dem du dich anmelden willst (in die Datei~/.ssh/authorized_keys).
Beim Anmelden stellt der Host eine Aufgabe, die nur mit dem passenden privaten Schlüssel lösbar ist. Der private Schlüssel verlässt deinen Rechner dabei nie.
sequenceDiagram
participant C as Client (privater Schlüssel)
participant H as Host (authorized_keys)
C->>H: Ich bin jmueller, hier mein öffentlicher Schlüssel
H->>H: Steht der Schlüssel in authorized_keys?
H->>C: Beweise es: Unterschreibe diese Zufallsdaten!
C->>H: Unterschrift (mit privatem Schlüssel)
H->>H: Unterschrift mit öffentlichem Schlüssel prüfen
H-->>C: Angemeldet ✔
1. Schlüssel erzeugen (am Client)
| |
Den Speicherort bestätigst du mit Enter. Eine Passphrase schützt deinen Schlüssel, falls jemand an deinen Rechner kommt. Der Befehl funktioniert unter Linux, macOS und in der Windows-PowerShell.
2. Öffentlichen Schlüssel verteilen
| |
Du gibst ein letztes Mal dein Passwort ein – danach meldest du dich mit ssh jmueller@192.168.0.10 ohne Passwort an (höchstens die Passphrase wird abgefragt).
Unter Windows gibt es ssh-copy-id nicht. In der PowerShell geht es so:
| |
Bei Servern im Internet (z. B. gemieteter Server, GitHub) fügst du den öffentlichen Schlüssel meist über eine Web-Oberfläche ein. Anzeigen kannst du ihn mit cat ~/.ssh/id_ed25519.pub.
Konfigurationsdatei mit Aliasen
Statt dir IP-Adressen und Benutzernamen zu merken, legst du am Client Kurznamen (Aliase) an – in der Datei ~/.ssh/config (Windows: C:\Users\<Name>\.ssh\config):
| |
Host pi
HostName 192.168.0.10
User jmueller
Host schulserver
HostName server.example.org
User jmueller
# Port nur nötig, wenn nicht 22
Port 2222
IdentityFile ~/.ssh/id_ed25519Jetzt reicht ssh pi. Die Aliase funktionieren auch mit scp (z. B. scp hallo.py pi:~/) und in VS Code.
SSH-Einstellungen am Server
Der SSH-Server wird in /etc/ssh/sshd_config eingestellt (das d steht für Daemon, den Server-Dienst – nicht verwechseln mit ssh_config für den Client). Sobald die Anmeldung mit Schlüssel klappt, solltest du Passwörter abschalten. Lege dafür am besten eine eigene Datei an:
| |
PasswordAuthentication no
PermitRootLogin noWarum eine eigene Datei mit 01-? Bei SSH gilt der erste gefundene Wert. Manche Systeme bringen z. B. 50-cloud-init.conf mit PasswordAuthentication yes mit – deine Datei wird vorher gelesen und gewinnt.
Einstellungen prüfen und Server neu starten:
| |
Nicht aussperren!
Lass deine bestehende SSH-Verbindung offen und teste die Anmeldung in einem zweiten Terminal. Erst wenn das klappt, schließt du die alte Verbindung.
Weiterführende Links
- ubuntuusers-Wiki: SSH – ausführlich und auf Deutsch
- Ubuntu Server: OpenSSH einrichten
- SSH-Schlüssel mit ssh-keygen
- VS Code: Remote Development using SSH
- Wikipedia: Secure Shell
- Im Terminal:
man ssh,man ssh_config,man sshd_config