Artikel & Guides

Linux – SSH Verbindung einfach unter einem Namen speichern

Erstellt am: 19. Juli 2022

SSH Verbindung mit einem Namen speichern

Du hast vielleicht auch schon einmal die Erfahrung gemacht, dass du von z.B. deinem Linux-Laptop auf deinen Raspberry pi eine SSH Verbindung herstellen wolltest, aber dir genau dann die IP-Adresse nicht mehr eingefallen ist. Hast du jetzt sogar mehrere Geräte die du über eine SSH Verbindung verwalten bzw. monitoren willst, wäre es doch viel praktischer wenn du dir einfach nur einen Namen merken müsstest um dich z.B. per ssh raspberry mit deinem Raspberry verbinden zu können.

ACHTUNG! Bitte lesen!
Du benutzt das hier Gezeigte natürlich, wie immer, auf eigenes Risiko!
Ich habe alles selbst durchgeführt und mir mein System nicht zerschossen oder sonst irgendwelche negativen Auffälligkeiten bemerkt.
Aber dennoch… Backups sind immer gut….
Ich übernehme keine Haftung für irgendwelche Schäden am System, der Hardware oder der Katze….

SSH und die config Datei

Das ganze Geheimnis dahinter ist eine Konfigurationsdatei, die im Home Verzeichnis des jeweiligen Users unter ~/.ssh angelegt wird.
Diese nennt sich – Achtung Überraschung – „config“ 😛
Folgende Befehle greifen darauf zu: ssh / scp / sftp / rsync

Hiermit kannst du dann eine SSH Verbindung unter einem Namen speichern – also ein Alias anlegen – und musst dir nicht mehr die IP-Adresse merken.

Voraussetzungen

Du benötigst hierfür ein Linux System mit installiertem OpenSSH client.
Bei den meisten aktuellen Linux-Systemen, und auch bei einem Raspberry Pi OS, ist dies bereits installiert.

Wie schon erwähnt, wird die config im .ssh Verzeichnis erstellt. Dieses wiederum wird automatisch angelegt sobald zum ersten mal eine SSH Verbindung von dem System ausgeführt wurde.
Sollte bei dir das Verzeichnis nicht vorhanden sein, kann es auch manuell erstellt werden. Bisher war das bei meinen Systemen allerdings noch nie notwendig.
Aber natürlich verrate ich dir auch wie du es selbst erstellen kannst.

Mit folgendem Befehl legst du das .ssh Verzeichnis unter deinem User an und vergibst die entsprechenden Rechte (chmod 700 – (rwx—— ) )

mkdir -p ~/.ssh && chmod 700 ~/.ssh

Standardmäßig ist die ‚config‚ Datei nicht vorhanden und du kannst sie einfach mit vi / nano oder einfach mit touch erstellen. Hierbei werden dann auch die Berechtigungen direkt passend gesetzt:

touch ~/.ssh/config && chmod 600 ~/.ssh/config

Struktur der config Datei um deiner SSH-Verbindung einen Namen / Alias zu geben

Die config Datei muss nach folgender Struktur erstellt werden.

Host hostname(ErsterHost)
SSH_OPTION value
SSH_OPTION value
usw.

Host hostname(ZweiterHost)
SSH_OPTION value
SSH_OPTION value
usw.

Im Prinzip ein recht simpler Aufbau. Name des Ziels und diverse Optionen für die SSH Verbindung.
Weiterhin kann man Befehle einrücken, dies dient bei vielen Einträgen der besseren Lesbarkeit, ist aber nicht notwendig.

Du kannst hier richtige „Szenarien“ aufbauen, was vielleicht manchmal Sinn ergibt, aber teilweise irgendwie verwirrend wirkt.
Daher beschränke ich mich hier auf die ganz simple Variante nach dem Schema:
Name, IP, User und evtl. noch die Angabe zum genutzten RSA-Key.
Für jede erforderliche IP / Host dann auch in einem eigenen Block.
Dennoch werde ich weiter unten ein Beispiel zeigen, wie man es „professioneller“ aufbauen kann – falls es dich interessiert 😉

Ein Beispiel für das config File einer SSH Verbindung

Wie du sicher schon weißt, kannst du dich über das Terminal per ssh z.B. mit ssh tester@testing.dwc.de -p 1234 verbinden.
Hier wäre der user=tester, der host=testing.dwc.de und der Port=1234
Damit du dich einfach mit ssh test verbinden kannst, müsstest du für dieses Beispiel folgendes in die config (~/.ssh/config) Datei schreiben:

Host test
    HostName testing.dwc.de
    User tester
    Port 1234

Und wenn du auch noch eine weitere SSH Verbindung nutzen möchtest, könntest du in derselben Datei z.B. folgendes ergänzen, damit es auch mit ssh ich-bin-drin funktionieren würde. Nur um das nochmal richtig zu stellen, es handelt sich hier lediglich um Beispiele. Du müsstest natürlich die richtigen Daten für dich eintragen. Also eine IP die es gibt und einen User der dort eingerichtet ist.

Host ich-bin-drin
    HostName 192.168.1.111
    User tester
    Port 1234

Beispiel mit einem RSA Key für eine SSH Verbindung und einem Namen / Alias

Du nutzt einen RSA Key und möchtest dich einfach mit ssh raspberry mit diesem verbinden?!
Auch dies ist kein Problem und kann in das config File eingetragen werden.
Nehmen wir an du nutzt als User ‚pi‘ und hast einen RSA Key der in deinem Home (~) Verzeichnis liegt und teste-mich heißt.
Dann müsstest du diese Angaben in das File schreiben – natürlich die IP-Adresse entsprechend anpassen.

Host raspberry
    User pi
    Port 22
    HostName 192.168.5.10
    IdentityFile ~/teste-mich

Das versprochene professionellere (kompliziertere…) Beispiel

Komplizierter geht es immer. Also werfen wir einen Blick auf ein entsprechendes Beispiel. Auch dieses würde sich in der config (~/.ssh/config) befinden.

Host test
    HostName 192.168.1.10
    User tester
    Port 1234
    IdentityFile ~/.ssh/teste-mich

Host testZwei
    HostName 192.168.5.50

Host testDrei
    HostName 192.168.6.60

Host *dwc
    user dwc

Host * !testDrei
    LogLevel INFO

Host *
    User root
    Compression yes

Erklärung:

  • Wenn du ssh test eingibst, dann wird das config File von oben nach unten sowie Zeile für Zeile verarbeitet. Dabei wird jede Bedingung geprüft ob diese zutrifft.
    Zuerst werden die Optionen bei ‚host test‘ verarbeitet, da dies ja für den genannten Host zutrifft.
    Nun werden die weiteren Einträge geprüft und als nächster Match die Option für das LogLevel bei Host * !testDrei verarbeitet, da diese Option für ALLE Host außer ‚testDrei‘ gelten sollen ( das * steht für alle und das ! negiert das Nachfolgende).
    Als letzter Match kommt dann der Eintrag Host * zur Verarbeitung. Hier ist zu beachten, dass NUR die Option Compression yes verarbeitet wird, da der User bereits bei host test angegeben wurde und NICHT überschrieben wird.
  • Zusammengefasst heißt das jetzt, dass bei der Eingabe von ssh test folgende Optionen benutzt werden:
HostName 192.168.1.10
User tester
Port 1234
IdentityFile ~/.ssh/teste-mich
LogLevel INFO
Compression yes
  • Merke: Es werden keine Werte überschrieben die zuvor bereits gesetzt wurden (von oben nach unten…)
  • Host *dwc – alle Optionen werden für Hosts, die ‚dwc‘ enthalten genutzt
  • Host * !testDrei – Die Optionen gelten für alle Hosts – außer für ‚testDrei‘
  • Host * – gilt für alle Hosts

Wie werden SSH Config File Optionen gelesen bzw. überschrieben

Der ssh client verarbeitet die Optionen wie folgt:

  1. Optionen die direkt in der command line eingegeben werden
  2. Optionen die in der ~/.ssh/config definiert sind und NICHT in der command line angegeben wurden
  3. Optionen die in der /etc/ssh/ssh_config definiert sind und NICHT in der command line angegeben wurden und NICHT in der ~/.ssh/config bereits definiert wurden

Das bedeutet, wenn du eine Option aus der config Datei temporär überschreiben möchtest, dann musst du diese Option lediglich beim Aufruf mit angeben. Bei dem Beispiel für den Host test möchten wir jetzt den User auf root ändern. Dazu würdest du dann folgendes in das Terminal schreiben:

ssh -o "User=root" test

Kopieren mit SCP und den Daten aus der Config

Du kannst die eingetragenen Daten auch für den Befehl SCP benutzen um damit gesichert Dateien oder Verzeichnisse zu kopieren.
Dies ist fast genauso simpel wie eine ssh-Verbindung zu starten:
scp /Pfad/lokal/Datei @NAME_HOST:/PFAD/ZUM/ZIEL

scp test.txt @raspberry:~/test/

Das oben genannte Beispiel kopiert also von lokal (z.B. Laptop) die Datei test.txt auf den „entfernten“ Server, der unter dem Host-Namen „raspberry“ in der Config eingetragen wurde. Solltest du in dieser auch ein IdentityFile (RSA-Key) eingetragen haben, musst du auch kein Passwort eingeben und es wird direkt kopiert.
Noch ein kleines Beispiel um einen ganzen Ordner (und Unterordner) zu kopieren:
Hier wird das -r mit angegeben, um zu signalisieren, dass wir einen Ordner kopieren wollen.
scp -r /Pfad/lokalerOrdner @NAME_HOST:/PFAD/ZUM/ZIEL

scp -r python_tutorials @raspberry:~/tutorials

Feedback kannst du gerne hier abgeben 🙂
Fragen natürlich auch !


Du würdest auch gerne Feedback geben?
Mir mitteilen dass ich dir helfen konnte?
Einfach nur „Danke“ sagen?
Oder mir etwas mitteilen was nicht so toll war?
Du hast ein Problem oder nur eine Frage?
Na dann los!

Möchtest du diese Seite und mich sogar unterstützen?!

Du kannst mich z.B. auf Patreon besuchen und kleinere Pakete schnüren. Es gibt dann auch ein paar Vorzüge 🙂

Schreibe einen Kommentar