Vernetzen mehrerer Linux Rechner per sicheren ssh

Hinweis: In dem Thema Vernetzen mehrerer Linux Rechner per sicheren ssh gibt es 1 Antwort.
  • Anleitung um zwei Linux Rechner mit Hilfe von ssh miteinander zu verbinden und am Ende sich den Desktop des zweiten Rechners
    auf den eigenen zu holen.


    Grundlagen:


    SSH dient dazu, sich sowohl lokal als auch über das Internet mit einem Rechner verschlüsselt zu verbinden.


    Wir behandeln hier den lokalen Zugriff.


    Da Linux ein Netzwerkbetriebssystem ist, ist der ssh-Server auf jeder Distribution bereits vorinstalliert, aber bei SUSE per default ausgeschaltet.


    Bei Suse startet man den ssh-Daemon unter Yast -> System -> Systemdienste (Runlevel); hierzu sshd starten.
    Den SSH-Server konfiguriert man am besten mit Yast.
    Dazu installieren wir uns das Paket: yast2-sshd


    Unter Yast -> Netzwerkdienste -> SSHD-Einrichtung können wir ssh einrichten.


    Im Register Allgemein lassen wir die Standardeinstellungen und aktivieren den Haken bei Firewall freigeben.
    Im Register Anmeldeeinstellungen entfernen wir als erstes aus Sicherheitsgründen den Root-Zugriff.
    Zusätzlich aktivieren wir für einen ersten Test RSA Authentication; dies bewirkt, dass wir uns auf dem entfernten Rechner mit unseren
    normalen Benutzerdaten dort einloggen können.
    Später sichern wir unseren SSH-Server ab und lassen nur noch das PublikKey Authentication zu, was dann ein Hacken von ausserhalb unmöglich machen wird.



    Rechner in einem Netzwerk werden mit ihrer eindeutigen IP angesprochen.
    Alle Rechner im Netz sollten eine IP aus der gleichen "Range" haben.


    Beispiel: 192.168.1.2
    192.168.1.3 usw.

    Da es auf Dauer umständlich ist jedesmal eine IP einzutippen, vergeben wir jedem Rechner im Netz einen Namen.
    Dieses wird unter Yast -> Netzwerkgeräte -> Netzwerkeinstellungen -> Registerkarte Hostname/DNS vorgenommen.
    Bekommt man seine IP durch dhcp von seinem Router, fügen wir auf jeden Rechner die gewünschte IP hinzu, den Rechnernamen sowie die Netzmaske 255.255.255.0


    Bei mir sieht das so aus: Yast -> Netzwerkeinstellungen -> Register Adresse -> Hinzufügen


    Aliasname: tanne
    IP-Adresse: 192.168.1.2
    Netzmaske: 255.255.255.0




    Um aber in Zukunft alle so eingerichteten Rechner mit ihrem eingetragenen Namen kontaktieren zu können, muss auf jedem Rechner
    als Root die Datei /etc/hosts angepasst werden, d.h in jeder /etc/hosts eines jeden Rechners sind alle sich im Netzwerk befindlichen Rechner mit IP und Rechnernamen
    einzutragen.



    Beispiel:
    192.168.1.2 tanne
    192.168.1.3 kiefer


    Nach Eingabe der IP drückt man die tab-Taste um dann den Rechnernamen zu schreiben.



    In den Netzwerkeinstellungen von Yast wird die Router-IP als Gateway eingetragen.


    Sollte ein direktes öffnen der Datei /etc/hosts in einem Root-Dolphin nicht möglich sein, ein Terminal öffnen und folgendes eingeben:


    Code
    xhost +local:0


    Sind die Vorarbeiten erledigt und der sshd läuft auf jedem Rechner, geht es ans eingemachte:


    Der grundlegende Aufruf zur Verbindung mit einem anderen Rechner ist bei SSH:


    Code
    ssh <benutzer>@<rechner>


    Das @ und <benutzer> kann man weglassen, wenn Ihr auf dem Server denselben Benutzernamen verwendet.


    Als nächstes fragt der Server nach dem Akkountpasswort (Benutzerpasswort) des kontaktierten Rechners und meldet Euch
    nach erfolgreicher Eingabe an dem Server an.


    Wenn Ihr jetzt in diesem Terminal Anwendungen startet, laufen diese zwar auf dem Server, werden aber auf dem Client angezeigt.
    Je nach SSH-Konfiguration können das auch grafische Anwendungen sein (X-Anwendungen).


    Falls beim obigen Anmelden eine Fehlermeldung kommt wie:


    Error: Can`t open display:


    beendet man den Einlogversuch mit


    <Strg><D>


    und verbindet sich erneut mit eingefügtem Parameter <-X>


    Code
    ssh -X <benutzer>@<rechner>


    -X schaltet das X-Forwarding ein.


    Mit der Option -X lassen sich also alle grafischen Programme auf dem entfernten Rechner starten und auf dem Clienten wiedergeben.


    Eine SSH-Sitzung beenden wir stets mit der Eingabe von exit


    Dateimanagement


    Die meisten User möchten natürlich keine grafischen Programme auf dem entfernten Rechner ausführen, sondern oftmals Daten vom Laptop
    zum Heimrechner transferieren.


    Hier bedienen wir uns der kio-slaves, die KDE mitbringt.


    Wir öffnen Dolphin und geben in die Adresszeile folgendes ein:


    Code
    fish://<benutzer>@<rechner>

    , um im Beispiel zu bleiben:

    Code
    fish://tux@kiefer


    Daraufhin wird das Benutzerpasswort des Rechners abgefragt und man ist im Home-Verzeichnis des entfernten Rechners und kann nach belieben
    Daten von einem Rechner zum anderen verschieben und kopieren.



    Eine weitere Möglichkeit besteht darin, sich den gesamten entfernten Desktop grafisch in einem Fenster des Clienten zu holen.


    Das "Zauberwort" für diese Möglichkeit heisst "Xnest"


    xnest befindet sich im Paket xorg-x11-server-extra, dass es mit Yast zu installieren gilt sofern es nicht schon auf dem Rechner ist.
    Für diese Vorgehensweise ist es erforderlich, dass der entfernte Rechner hochgefahren ist aber keine KDE-Anmeldung erfolgt ist.
    Man sollte also auf dem Remote-Rechner den KDM-Anmeldungsmanager sehen.


    Logge Dich per ssh ein:


    Code
    ssh -XC <user>@<remote-rechner>


    Die hinzugefügte Option "C" dient dazu, dass die Daten komprimiert übertragen werden, weil beim Remote-Betrieb von X-Anwendungen sehr viel
    mehr Daten übertragen werden müssen.


    Dann gibt man ein:


    Code
    Xnest :1 &


    um Xnest eine X-Session starten zu lassen.


    Man sieht nun ein leeres Fenster auf seinem Heimrechner-


    Gib dann ein:


    Code
    export DISPLAY=localhost:1


    Mit 1 legst Du eine Displaynummer fest; meist ist die 0 schon vergeben.
    Der Befehl soll im Hintergrund gestartet werden (&), weil noch weitere
    Eingaben folgen.


    "export" legt fest, das alle folgenden grafischen Ausgaben dem Display 1
    übergeben werden.
    Xnest lenkt sie auf das bisher leere Fenster auf Deinem Heimrechner um.


    Mit


    Code
    startkde &


    startet man auf dem entfernten Rechner KDE sofern es dort installiert ist.
    Ansonsten icewm-session & oder einen Startbefehl für einen anderen
    Windowmanager der dort installiert ist.


    SICHERHEIT


    Wir erinnern uns, dass wir in den Yast Einstellungen für SSH den "normalen" Login mit Benutzernamen und Passwort zugelassen haben.
    Da wir durch ssh einen Firewall Port offen haben, besteht die Gefahr, dass unser Rechner von ausserhalb angreifbar ist.


    Dem legen wir jetzt einen Riegel vor und lassen nur noch "Schlüsseldateien" zu die wir auf unsere
    Rechner kopieren.


    Ein Schlüssel ist privat, bleibt auf dem eigenen Rechner und darf nicht in fremde Hände gelangen.
    Der/Die anderen Schlüssel sind öffentlich und werden auf die Rechner kopiert auf die man per ssh zugreifen will.


    Ein Angreifer muss also im Besitz des privaten Schlüssels sein um sich per ssh auf die Rechner im Netzwerk einloggen zu können.


    Erzeugen der Schlüssel:


    Tippe:

    Code
    ssh-keygen -t dsa

    in ein Terminal.


    Nun rechnet der Schlüsselgenerator ein wenig und schlägt dann als Dateinamen ~/.ssh/id_dsa vor, was wir bestätigen.
    Danach fragt er nach einer Passphrase- es geht dabei nicht um das Passwort, das wir verwenden um uns per einfachem Login auf dem entfernten Rechner
    anzumelden, sondern das die private Schlüsseldatei vor jeder Verwendung freischaltet.


    Wenn man garantieren kann, dass keine unbefugte Person an unseren Rechner kommen kann, können wir den Schritt auch überspringen (enter).


    Ist das Schlüsselpaar erstellt, kopieren wir den öffentlichen Schlüssel mit


    Code
    ssh-copy-id -i ~/.ssh/id_dsa.pub <benutzer>@<rechner>


    auf den entfernten Rechner.


    Erst jetzt entfernen wir das gesetzte Häkchen in den SSH-Einstellungen von Yast (RSA-Authentication).


    Nun öffnen wir als Root die datei /etc/ssh/sshd_config, scrollen ganz nach unten und überzeugen uns, dass bei PubkeyAuthentication yes steht.


    Darüber hinaus schreiben wir da drunter noch folgendes, so das der Abschnitt so aussieht:


    Code
    AllowTcpForwarding yes
    Compression yes
    MaxAuthTries 6
    PermitRootLogin no
    PrintMotd yes
    PubkeyAuthentication yes
    RSAAuthentication no
    KerberosAuthentication no
    PasswordAuthentication no
    ChallengeResponseAuthentication no


    Abschließend speichern wir die Datei und starten den SSH-Server mit:


    Code
    /etc/init.d/sshd restart


    neu.


    Es gibt noch zahlreiche Funktionen wie beispielsweise den Standardport zu ändern wenn man meint der Rechner wird auf Port 22 zu viel angegriffen
    oder man kann sich das eintippern der Passphrase erleichtern, in dem sie nur einmal in einem Agenten eingetippt wird solange man eingeloggt ist usw.


    Bei Interesse ergänze ich dieses kleine HowTo und wünsche nun viel Spaß beim ausprobieren.

    2 Mal editiert, zuletzt von robbie ()

    Für den Inhalt des Beitrages 19548 haftet ausdrücklich der jeweilige Autor: robbie

  • Ich bin gebeten worden, diese Anleitung ein bißchen zu erweitern.


    Um mit Begrifflichkeiten wie Client und Server nicht durcheinander zu kommen, spreche ich ab jetzt immer vom entfernten Rechner.
    So weiß jeder, dass es sich um den Rechner handelt wo man sich über SSH von einem zweiten Rechner aus eingeloggt hat.


    Zunächst sei der Hinweis gestattet, dass es mit "KSSH" ein grafisches Tool gibt um sich per ssh auf einen entfernten Rechner einloggen zu können.
    Klickt man dort auf "Show Options", gelangt man zu einer Art Formular, wo man sich sämtliche Optionen für eine SSh-Verbindung zusammenklicken und als Voreinstellung speichern kann.
    da man sich schnell "erschlagen" vorkommt was die Optionen angeht, gehe ich nicht weiter auf das Tool ein; wenn man aber mit der Maus über eine Option fährt, erscheint jeweils eine Kurzbeschreibung, die erahnen lässt was es mit der Option auf sich hat.


    Im Teil 1 der Anleitung sind wir bis zum generieren von Schlüsseldateien gekommen, die ein einloggen nur noch ermöglichen wenn eine Schlüsseldatei auf den Rechnern vorhanden ist.


    Hat man wie im ersten Beitrag beschrieben die Passphrase nicht abgewählt, kann es auf Dauer lästig werden diese einzugeben um die Schlüsseldateien freizugeben wenn man sich immer wieder auf den entfernten Rechner einloggen muss.
    Vor allem kann das eintippern der Passphrase dann lästig werden, wenn man sich auf mehreren entfernten Rechnern per ssh einloggen muss.


    Hier kann der SSH-Agent helfen:


    Er nimmt die Passphrase zur Freischaltung der Schlüsseldateien einmalig entgegen und teilt sie bei jeder SSH-Verbindung dem anfragenden Programm mit, egal ob wir uns im Terminal auf dem entfernten Rechner einloggen wollen, oder eijn entferntes Verzeichnis mit shfsmount mounten oder mit fish:// - URLs im Dateimanager eine Verbindung aufbauen.


    Den Agenten aktivieren wir in einem Terminal mit diesem Befehl:

    Code
    ssh-add

    Der Agent fragt die Passphrase einmal ab und speichert sie, bis wir den X-Server beendet haben; also bis wir uns vom Desktop abgemeldet haben oder den Rechner ausschalten.


    Mit

    Code
    ssh-add -d

    können wir die Passphrase aber auch manuell aus dem Agenten löschen. Mit der Option

    Code
    -L

    können wir uns den Status des Agenten anzeigen lassen.


    Wenn wir uns mit Yast das Paket

    Code
    openssh-askpass

    oder

    Code
    ksshaskpass

    installieren, wird die Passphrase auch in einer grafischen Dialogbox abgefragt; das letztgenannte Paket arbeitet mit kwallet zusammen, so dass nur noch das Passwort für die digitale Breiftasche eingegeben werden muss.
    Ich persönlich bevorzuge aber das erstgenannte Tool "openssh-askpass, weil mir das eintippern meines aus 46 Buchstaben und Zahlen bestehenden kwallet Passwortes auf Dauer lästig ist.


    ssh-add im Terminal ruft die grafische Eingabemaske automatisch auf, wenn eines der beiden o.g. Tools installiert ist.


    Man kann sich ssh-add allerdings auch noch sparen, in dem man sich einen kurzen Zweizeiler mit diesem Inhalt

    Code
    #/bin/sh
    ssh-add </dev/null &

    schreibt, einen beliebigen Dateinamen vergibt, das Script ausführbar macht und in den KDE Autostartordner packt.


    So wird die Passphrase gleich beim KDE-Start grafisch abgefragt und man kann sich stets auf die entfernten Rechner per ssh einloggen.


    Um die Vereinfachung nun auf die Spitze zu treiben, gibt es noch die Möglichkeit, die Passphrase direkt vor dem Systemstart als Passwort im Anmeldungsmanager KDM einzugeben, so dass das eigene Passwort mit dem wir uns normal auf dem System einloggen, gar nicht mehr notwendig ist.


    Dazu installieren wir uns das Tool

    Code
    ssh_pam

    mit Yast.


    Ist das Tool installiert, öffnen wir die Datei:

    Code
    /etc/pam.d/xdm

    in einem Editor mit Rootrechten und schreiben unter dem Eintrag

    Code
    #%PAM-1.0

    die Zeile

    Code
    auth sufficient pam_ssh.so

    rein und unter dem Eintrag

    Code
    session include common-session

    die Zeile

    Code
    session required pam_ssh.so



    Nun melden wir uns vom Desktop ab und melden uns erneut an und geben dabei nicht mehr unser Systempasswort als User ein sondern die Passphrase für die SSH-Schlüsseldateien.



    Mit dieser Vorgehensweise schlagen wir also zwei Fliegen mit einem Klatsch, weil wir sowohl die Systemanmeldung als auch das einloggen per SSH mit einmaligem Eintrag der Passphrase erledigt haben.


    Übrigens kann man sich immer noch mit seinem Systempasswort anmelden, hat aber nicht die Schlüssel für SSH freigeschaltet.
    Das hat allerdings einen kleine Haken, weil das Passwortfeld immer erst dem SSH-Agenten gehört.


    Lösung wenn man sich nur mit seinem Systempasswort anmelden will: Passwortfeld leer lassen und Enter drücken; bei der nächsten Anmeldung in etwa 3 Sekunden funktioniert das Systempasswort wieder.

    Für den Inhalt des Beitrages 22101 haftet ausdrücklich der jeweilige Autor: robbie