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.
Um diesem Tutorial zu folgen, benötigen Sie Folgendes:
sudo
-Benutzers ohne Rootberechtigung und eine Firewall.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:
[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:
Outpute70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383
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.
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:
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:
Klicken Sie Generate New Key Pair. Ihre Schlüssel werden generiert und wie im folgenden Bild angezeigt:
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:
Outputuid=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:
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:
Output5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 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.
Geben Sie in NKN Shell Client Ihre Remote-nshd
-Adresse aus Schritt 1 sowie einen optionalen Client-Identifikator ein:
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:
Outputauthorized_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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!