Tutorial

Verwendung von nsh zur sicheren Ausführung von Remotebefehlen auf Ubuntu 18.04

SecurityUbuntu 18.04

Einführung

Es kann oft schwierig sein, täglich mehrere Rechner zu betreiben. Obwohl Secure Shell (SSH) eine gute Wahl für den Remote-Zugriff ist, hat die Ausführung selbst einige Nachteile, was die Bequemlichkeit und Sicherheit anbelangt.

Beispielsweise benötigen Remote-Rechner eine öffentliche IP-Adresse und einen weitergeleiteten Port, damit auf sie zugegriffen werden kann, wodurch sie dem Internet oder zumindest einem größeren Netzwerk ausgesetzt sind. Dies ist insbesondere dann bedenklich, wenn Sie zur Authentifizierung ein Passwort anstelle eines öffentlichen und privaten Schlüsselpaares verwenden. Wenn Sie außerdem den öffentlichen Schlüssel des Remote-Rechners nicht im Voraus kennen, könnten Sie für einen “Man-in-the-Middle-Angriff” anfällig sein. Auch haben viele Remote-Rechner, auf die Sie zugreifen möchten, entweder keine öffentliche IP-Adresse oder eine dynamische IP-Adresse, die Sie möglicherweise nicht kennen.

Außerdem benötigt SSH jeweils eine Verbindung pro Remote-Sitzung. Wenn ein Benutzer einen einzelnen Befehl über Hunderte oder sogar Tausende von Rechnern ausführen muss, muss er sich zunächst mit jedem Rechner mittels TCP-Handshake verbinden, was weniger effizient ist.

NKN Shell oder nsh ist eine Alternative zu SSH, die eine bequeme und sichere Möglichkeit bietet, Remote-Befehle auszuführen. Nsh nutzt das globale öffentliche Netzwerk von NKN, das eine sichere und dezentrale Datenübertragung bereitstellt. Die Architektur verwendet individuelle Adressen, die einen öffentlichen Schlüssel sowohl zum Routing als auch zur End-to-End-Verschlüsselung ohne Public-Key-Infrastruktur (PKI) enthalten. Für das Netzwerk ist es auch nicht erforderlich, dass der Remote-Server eine öffentliche IP-Adresse hat. Der Remote-Server benötigt nur Zugang zum Internet und muss in der Lage sein, ausgehende HTTP- und Websocket-Verbindungen herzustellen. Dadurch sind Ihre Remote-Rechner nicht dem offenen Internet ausgesetzt.

In diesem Tutorial nutzen Sie die Anwendungen NKN shell daemon und NKN Shell Client Xterm, um Befehle auf einem Remote-Rechner auszuführen. Dazu installieren und konfigurieren Sie den NKN Shell Daemon auf einem Remote-Rechner mit Internet-Zugang, generieren ein Schlüsselpaar und erstellen Ihre Verbindung von einem Client.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie Folgendes:

Schritt 1 — Installieren von NKN Shell auf einem Remote-Server

Installieren Sie zunächst den NKN shell daemon (nsd) auf Ihrem Server. Diese Anwendung ruft nkn-multiclient auf, der sich mit dem öffentlichen Netzwerk von NKN verbindet und eine Adresse zum Routing erhält. Der Daemon empfängt dann eingehende Shell-Befehle von authentifizierten und erlaubten Clients, führt diese Befehle aus und sendet danach Ergebnisse zurück.

Beginnen Sie mit dem Herunterladen des neuesten pre-built nshd binary from GitHub​​:

  • wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

Dekomprimieren Sie die Datei:

  • tar -zxvf linux-amd64.tar.gz

Verschieben Sie dann die Dateien in das Verzeichnis /usr/local/bin, damit sie systemweit verfügbar sind:

  • sudo mv ./linux-amd64/* /usr/local/bin/

Als Nächstes konfigurieren Sie dies als Daemon-Prozess mit Systemd, damit es neu gestartet wird, wenn der Server zurückgesetzt wird.

Erstellen Sie eine Datei namens nshd.service in /etc/systemd/system:

  • sudo nano /etc/systemd/system/nshd.service

Fügen Sie der Datei folgende Dienst-Definition hinzu, um den Dienst zu konfigurieren:

/etc/systemd/system/nshd.service
[Unit]
Description=NKN Shell Daemon
After=network.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/nshd

[Install]
WantedBy=multi-user.target

Erfahren Sie mehr über Systemd Unit-Dateien in Verstehen von Systemd Units und Unit-Dateien.

Speichern Sie die Datei und beenden Sie den Editor. Aktivieren und starten Sie dann den nshd-Dienst mit den folgenden Befehlen:

  • sudo systemctl enable nshd.service
  • sudo systemctl start nshd.service

Führen Sie den folgenden Befehl aus, um sicherzustellen, dass der Dienst aktiv und gestartet ist:

  • sudo systemctl status nshd.service

Sie sehen, dass der Status aktiv ist:

Output
● nshd.service - NKN Shell Daemon Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago Main PID: 3457 (nshd) Tasks: 10 (limit: 1152) CGroup: /system.slice/nshd.service └─3457 /usr/local/bin/nshd Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon. Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/ Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

Um sich mit Ihrem Server zu verbinden, müssen Sie seine NKN-Adresse bereitstellen, die Sie im Output des vorherigen Befehls finden. Sie können auch den folgenden Befehl ausführen, um die Adresse zu erhalten:

  • nshd addr

Ihre Adresse wird Ihnen angezeigt:

Output
e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

Notieren Sie sich diese Adresse, da Sie sie brauchen, um sich mit Ihrem Server zu verbinden.

Nachdem nun der Daemon läuft und empfängt, können Sie den webbasierten Client konfigurieren, um mit dem Server zu kommunizieren.

Schritt 2 — Konfigurieren von Berechtigungen für NKN Shell Client

Sie benötigen einen kompatiblen Client, der sich mit dem Remote-Rechner verbinden kann. In diesem Tutorial verwenden Sie NKN Shell Client Xterm, einen webbasierten NKN Shell-Client. Es gibt einige verschiedene Möglichkeiten, um diesen auszuführen:

  • Verwenden Sie die gehostete Version unter https://nsh.nkn.org/. Beachten Sie, dass diese Webseite zwar auf einem Server gehostet wird, aber eigentlich eine rein lokale Webanwendung ist, die in Ihrem Browser läuft.
  • Nehmen Sie den Quellcode und hosten Sie ihn selbst.
  • Verwenden Sie die nShell Chrome Extension.

In diesem Tutorial verwenden Sie die gehostete Version. Öffnen Sie den Webbrowser auf Ihrem lokalen Rechner und navigieren Sie zu https://nsh.nkn.org. Sie sehen einen Startbildschirm:

The Shell Client

Klicken Sie Generate New Key Pair. Ihre Schlüssel werden generiert und wie im folgenden Bild angezeigt:

Generiertes Schlüsselpaar

Anmerkung: Wenn Sie ein neues Schlüsselpaar generieren, sehen Sie einen Secret Seed. Verwahren Sie diesen Secret Seed sicher auf – genauso, wie Sie es mit Ihrem SSH-Schlüssel tun würden. Jeder, der über den Secret Seed verfügt, kann ihn zum Regenerieren Ihres öffentlichen Schlüssels und zum Ausführen von Befehlen auf Ihren Remote-Rechnern verwenden. Ihr Browser speichert diesen Seed, aber Sie sollten ihn an einem sicheren Ort aufbewahren, um ihn bei Bedarf erneut auf einem neuen Rechner verwenden zu können.

Speichern Sie den Secret Seed an einem sicheren Ort. Sie können ihn später verwenden, um Ihren öffentlichen Schlüssel zu regenerieren, damit Sie sich von einem anderen Client-Rechner aus verbinden können.

Da es sich um ein neues Schlüsselpaar handelt, müssen Sie den öffentlichen Schlüssel der Datei /etc/nshd/authorized_pubkeys auf Ihrem Server hinzufügen.

/etc/nshd/authorized_pubkeys hat eine ähnliche Rolle wie die Datei ~/authorized_keys, die steuert, welche öffentlichen SSH-Schlüssel sich anmelden können. Die Datei authorized_pubkeys kann bestimmen, welcher Benutzer mit einem Schlüssel verbunden ist. Loggen Sie sich in diesem Tutorial aus Sicherheitsgründen als Benutzer ohne Rootberechtigung ein, sodass Sie den generierten öffentlichen Schlüssel mit dem sammy-Benutzer, den Sie in der Anleitung zum Server-Setup kreiert haben, verbinden.

Um einen Benutzer mit dem öffentlichen Schlüssel zu verbinden, müssen Sie die User-ID (UID) und Group-ID (GID) dieses Benutzers bereitstellen. Führen Sie den folgenden Befehl auf Ihrem Server aus, während Sie als sammy-Benutzer angemeldet sind:

  • id

Sie sehen die UID und GID des Benutzers:

Output
uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

Öffnen Sie nun die Datei authorized_pubkeys in Ihrem Editor:

  • sudo nano /etc/nshd/authorized_pubkeys

Fügen Sie eine einzelne Zeile hinzu, die den öffentlichen Schlüssel sowie die UID und GID enthält, die durch Leerstellen getrennt sind:

authorized_pubkeys
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Speichern Sie die Datei.

Überprüfen Sie, ob die Datei den richtigen Inhalt enthält:

  • cat /etc/nshd/authorized_pubkeys

Sie sehen Ihren Schlüssel auf dem Bildschirm:

Output
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Starten Sie dann den Daemon nshd neu, um die Änderungen anzuwenden:

  • sudo systemctl restart nshd.service

Führen Sie nun einen Test aus, indem Sie sich mit dem Server verbinden und einen Befehl ausführen.

Schritt 3 — Senden eines Befehls an den Remote-Rechner und Empfangen einer Antwort

Geben Sie in NKN Shell Client Ihre Remote-nshd-Adresse aus Schritt 1 sowie einen optionalen Client-Identifikator ein:

Die nsh-Website mit der ausgefüllten Remote-Adresse

Klicken Sie auf Connect, um die Verbindung herzustellen.

Sie werden mit Ihrem Remote-Rechner verbunden und bekommen eine Terminal-Eingabeaufforderung im Browser angezeigt. Sie können nun weiter vorgehen wie sonst mit SSH. Führen Sie beispielsweise den folgenden Befehl aus, um in das Verzeichnis /etc/nshd zu wechseln:

  • cd /etc/nshd

Dann listen Sie den Inhalt auf:

  • ls

Sie sehen den Inhalt des Verzeichnisses:

Output
authorized_pubkeys wallet.json wallet.pswd

Sie können sich mit der Eingabe von exit trennen. Wenn Sie sich erneut verbinden möchten, gehen Sie zurück zur Web-Oberfläche und geben Ihre Verbindungsdaten ein. Wenn Sie ein neues Schlüsselpaar generieren, müssen Sie den neuen öffentlichen Schlüssel Ihrem Server hinzufügen.

Zusammenfassung

In diesem Tutorial haben Sie nsh installiert und konfiguriert, um Befehle sicher und bequem zu einem Remote-Rechner zu senden. Nsh bietet eine hervorragende Möglichkeit, auf Ihre Remote-Rechner zuzugreifen, wenn Sie schnell einen Befehl ausführen müssen, um den neuesten Status eines Dienstes zu erhalten oder um einen Blick auf die Konfigurationseinstellungen zu werfen. Die Anwendung befindet sich auf dem globalen öffentlichen Netzwerk von NKN und ist kostenfrei nutzbar, sodass Sie sie heute in Ihre eigene Anwendung oder Ihren Workflow einbinden können.

Erkunden Sie auch nkn-tunnel, das SSH und andere TCP-basierte Anwendungen unterstützt.

Creative Commons License