Zum Inhalt springen
SSH - Einführung

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

  1. Stelle sicher, dass der openssh-server auf dem Host installiert ist. Falls nicht, installiere openssh-server per apt, das geht so. Führe vorher sudo apt update aus, um die Paketlisten zu aktualisieren. Mit sudo apt upgrade kannst du installierte Software übrigens aktualisieren. Mache das ab und an, wenn du Zeit hast.
  2. 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.

1
ssh benutzername@ip-adresse

Beispiel:

1
ssh jmueller@192.168.0.10

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:

1
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

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:

  1. Sorge dafür, dass beide Geräte, Client und Host, im gleichen Netzwerk (oft WLAN) sind.
  2. Gib am Host hostname -I (alternativ ip a bzw. ip addr) ein und finde die IP-Adresse. Bei ip a musst du eine Zeile wie inet 192.168.0.10/24 suchen. 192.168.0.10 wäre in diesem Fall die IP-Adresse. (Am Mac: ipconfig getifaddr en0, unter Windows: ipconfig.)
  3. 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:

  1. Fahre genau einen Raspberry Pi hoch.
  2. Führe an deinem Rechner ssh user@rpi.local aus.
  3. Wenn du mit dem Raspi verbunden bist, lies die IP-Adresse mit hostname -I aus. Notiere diese IP physisch auf dem Raspberry Pi mit einem Ettiket.
  4. Trage diesen Host in deiner Konfigurationsdatei mit Aliasen ein, bspw. mit dem Alias rpi_12 für den Raspberry mit der Nummer 12. Dann kannst du dich zukünftig einfach mit ssh rpi_12 an diesem Raspi anmelden.

Aufgaben

  1. Logge dich via SSH auf dem gemeinsamen Ubuntu-Rechner ein.
  2. Erstelle einen Ordner mit deinem Namen.
  3. Lege eine Textdatei in diesem Ordner an: z. B. steckbrief.txt. Das kannst du mit einem einfachen Editor wie nano machen: 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ür Strg.
  4. Schreibe mit nano etwas über dich hinein.
  5. Beende nano mit Strg + X, bestätige das Speichern mit Y (bzw. J) und Enter.
  6. Ü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

  1. Erstelle eine Datei mit der Endung .py, z. B. hallo.py.
  2. Öffne sie mit nano hallo.py und schreibe z. B.:
    1
    
    print("Hallo aus dem Terminal!")
  3. Speichern mit Strg + O, schließen mit Strg + X.
  4. Ausführen mit:
    1
    
    python3 hallo.py

Weiterführende Übungen

  1. Lade dir eine SSH-App auf dein Smartphone, bspw. Termius. Logge dich damit auf dem Notebook ein und versuche damit zu arbeiten.
  2. Finde weitere nützliche Terminal-Befehle, mit denen man bspw. Dateien kopieren, verschieben, Rechte an der Datei ändern kann etc.
  3. Kopiere eine Datei von deinem Rechner auf den Host: scp hallo.py jmueller@192.168.0.10:~/
  4. 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.

  1. Installiere in VS Code die Erweiterung Remote - SSH (von Microsoft).
  2. Wähle in der Seitenleiste Remote - SSH und dann Remote-SSH: Connect to Host... und gib benutzername@ip-adresse ein.
  3. Ö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)

1
ssh-keygen -t ed25519 -C "jmueller@schule"

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

1
ssh-copy-id jmueller@192.168.0.10

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:

1
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh jmueller@192.168.0.10 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

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):

1
nano ~/.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_ed25519

Jetzt 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:

1
sudo nano /etc/ssh/sshd_config.d/01-sicherheit.conf
PasswordAuthentication no
PermitRootLogin no

Warum 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:

1
2
3
sudo sshd -t                                  # Syntax prüfen (keine Ausgabe = ok)
sudo systemctl restart ssh
sudo sshd -T | grep -i passwordauthentication # zeigt den wirksamen Wert

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

Zuletzt aktualisiert am