One place for hosting & domains

      Verwendung von nsh zur sicheren Ausführung von Remotebefehlen auf Ubuntu 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:

      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:

      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:

      Dann listen Sie den Inhalt auf:

      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.



      Source link

      Comment utiliser nsh pour exécuter des commandes à distance sécurisées sur Ubuntu 18.04


      Introduction

      Il peut souvent être difficile de gérer plusieurs machines au quotidien. Si Secure Shell (SSH) est un bon choix pour l’accès à distance, le protocole lui-même présente quelques inconvénients en termes de commodité et de sécurité.

      Par exemple, les machines distantes doivent avoir une adresse IP publique et un port de transfert pour pouvoir y accéder, ce qui les expose à Internet, ou du moins à un réseau plus vaste. Cela est particulièrement préoccupant si vous utilisez un mot de passe pour l’authentification au lieu d’une paire de clés publiques et privées. De plus, si vous ne connaissez pas à l’avance la clé publique de la machine distante, vous pourriez être vulnérable à une attaque de type « l’homme du milieu ». Et de nombreuses machines distantes auxquelles vous voulez accéder n’ont pas d’adresse IP publique, ou ont une adresse IP dynamique que vous ne connaissez peut-être pas.

      De plus, le SSH nécessite une connexion par session à distance. Si un utilisateur doit exécuter une seule commande sur des centaines ou même des milliers de machines, il doit d’abord établir une connexion avec chaque machine au moyen d’un handshake (établissement d’une liaison) TCP, ce qui est moins efficace.

      NKN Shell, ou nsh, est une alternative à SSH qui fournit un moyen pratique et sûr d’exécuter des commandes à distance. nsh tire profit du réseau public mondial de NKN, qui fournit une transmission de données sécurisée et décentralisée. L’architecture utilise des adresses uniques qui contiennent une clé publique utilisée à la fois pour le routage et le cryptage de bout en bout sans aucune infrastructure à clé publique (PKI). Le réseau n’exige pas non plus que le serveur distant ait une adresse IP publique. Le serveur distant doit seulement avoir accès à Internet et être capable d’établir des connexions HTTP sortantes et des connexions websocket. Par conséquent, vos machines distantes ne sont pas exposées au réseau ouvert Internet.

      Dans ce tutoriel, vous utiliserez le démon NKN shell et les applications NKN Shell Client Xterm pour exécuter des commandes sur une machine distante. Pour ce faire, vous devez installer et configurer le démon NKN Shell sur une machine distante avec accès à Internet, générer une paire de clés et établir votre connexion à partir d’un client.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

      Étape 1 – Installation du démon NKN Shell sur un serveur distant

      Tout d’abord, installez le démon shell NKN (nsd) sur votre serveur. Cette application appellera nkn-multiclient, qui se connectera au réseau public de NKN et obtiendra une adresse pour le routage. Le démon écoutera alors les commandes shell entrantes des clients authentifiés et en liste blanche, exécutera ces commandes, puis renverra les résultats.

      Commencez par télécharger le dernier binaire nshd pré-construit de GitHub

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

      Décompressez le fichier :

      • tar -zxvf linux-amd64.tar.gz

      Ensuite, déplacez les fichiers dans le répertoire /usr/local/bin pour qu’ils soient disponibles dans tout le système :

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

      Puis vous configurerez ceci pour qu’il s’exécute comme un processus de démon utilisant Systemd afin qu’il redémarre si le serveur est réinitialisé.

      Créez un fichier appelé nshd.service dans /etc/systemd/system :

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

      Ajoutez la définition de service suivante au fichier pour configurer le service :

      /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
      

      Pour en savoir plus sur les fichiers d’unité Systemd, consultez la rubrique Comprendre les unités Systemd et les fichiers d’unité. 

      Enregistrez le fichier et quittez l’éditeur. Ensuite, activez et démarrez le service nshd avec les commandes suivantes :

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

      Exécutez la commande suivante pour vous assurer que le service est actif et démarré :

      • sudo systemctl status nshd.service

      Vous verrez que le statut est actif :

      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

      Pour vous connecter à votre serveur, vous devez obtenir son adresse NKN, que vous pouvez trouver dans la sortie de la commande précédente. Vous pouvez également exécuter la commande suivante pour obtenir l’adresse :

      Vous verrez apparaître votre adresse :

      Output

      e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

      Prenez note de cette adresse, car vous en aurez besoin pour vous connecter à votre serveur.

      Maintenant que le démon fonctionne et écoute, vous pouvez configurer le client web pour qu’il parle au serveur.

      Étape 2 – Configuration des autorisations pour le client NKN Shell

      Vous aurez besoin d’un client compatible qui puisse se connecter à la machine distante. Dans ce tutoriel, vous utiliserez NKN Shell Client Xterm, un client shell NKN basé sur le web. Il existe plusieurs façons de le gérer :

      • Utilisez la version hébergée à l’adresse https://nsh.nkn.org/. Notez que même si cette page web est hébergée sur un serveur, il s’agit en fait d’une application web purement locale qui s’exécute dans votre navigateur.
      • Obtenez le code source et hébergez-le vous-même.
      • Utilisez l’extension nShell Chrome.

      Dans ce tutoriel, vous utiliserez la version hébergée. Sur votre machine locale, ouvrez votre navigateur web et naviguez jusqu’à https://nsh.nkn.org. Vous verrez un écran de bienvenue :

      Le client Shell 

      Cliquez sur Generate New Key Pair (Générer une nouvelle paire de clés). Vos clés seront générées et affichées comme indiqué dans l’image suivante :

      La paire de clés générée

      Remarque: Lorsque vous générez une nouvelle paire de clés, vous voyez apparaître une seed secrète. Gardez cette seed secrète en sécurité, tout comme vous le feriez avec votre clé privée SSH. Toute personne qui possède cette seed secrète peut l’utiliser pour régénérer votre clé publique et ensuite exécuter des commandes sur vos machines à distance. Votre navigateur se souviendra de cette seed, mais vous devriez la copier dans un endroit sûr afin de pouvoir la réutiliser sur une nouvelle machine.

      Sauvegardez la seed secrète dans un endroit sûr. Vous pourrez l’utiliser plus tard pour régénérer votre clé publique, afin de pouvoir vous connecter à partir d’une autre machine cliente.

      Comme il s’agit d’une nouvelle paire de clés, vous devez ajouter la clé publique au fichier /etc/nshd/authorized_pubkeys sur votre serveur.

      /etc/nshd/authorized_pubkeys a un rôle similaire à celui du fichier ~/authorized_keys qui contrôle quelles clés publiques SSH peuvent se connecter. Le fichier authorized_pubkeys peut spécifier quel utilisateur est associé à une clé. Pour des raisons de sécurité, vous devrez vous connecter en utilisant un utilisateur non root dans ce tutoriel. Vous associerez donc la clé publique générée à votre utilisateur sammy que vous avez créé dans le guide de configuration initiale du serveur, dans le pré-requis de cet article.

      Pour associer un utilisateur à la clé publique, vous devez obtenir l’identifiant de l’utilisateur (UID) et l’identifiant du groupe (GID) de cet utilisateur. Exécutez la commande suivante sur votre serveur lorsque vous êtes connecté en tant qu’utilisateur sammy :

      Vous verrez l’UID et le GID de l’utilisateur :

      Output

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

      Ouvrez maintenant le fichier authorized_pubkeys dans votre éditeur :

      • sudo nano /etc/nshd/authorized_pubkeys

      Ajoutez une seule ligne contenant la clé publique, uid, et gid, séparés par des espaces :

      authorized_pubkeys

      5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
      

      Sauvegardez le fichier.

      Vérifiez que le fichier contient le bon contenu :

      • cat /etc/nshd/authorized_pubkeys

      Vous verrez votre clé apparaître à l’écran :

      Output

      5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

      Redémarrez ensuite le démon nshd pour appliquer les changements :

      • sudo systemctl restart nshd.service

      Maintenant, testons le tout en nous connectant au serveur et en exécutant une commande.

      Étape 3 – Envoi d’une commande à la machine distante et réception d’une réponse

      Dans NKN Shell Client, entrez votre adresse nshd distante à l’étape 1, ainsi qu’un identifiant client optionnel :

      Le site web de la nsh avec l'adresse à distance complétée

      Cliquez sur Connect (Se connecter) pour lancer la connexion.

      Vous serez connecté à votre machine distante et une invite de terminal s’affichera dans le navigateur. D’ici, vous pouvez l’utiliser tout comme les SSH. Par exemple, exécutez la commande suivante pour passer au répertoire /etc/nshd :

      Ensuite, dressez la liste de son contenu :

      Vous verrez le contenu de l’annuaire :

      Output

      authorized_pubkeys wallet.json wallet.pswd

      Vous pouvez vous déconnecter en tapant exit. Lorsque vous devez vous reconnecter, revisitez l’interface web et entrez vos coordonnées de connexion. Si vous générez une nouvelle paire de clés, vous devrez ajouter la nouvelle clé publique à votre serveur.

      Conclusion

      Dans ce tutoriel, vous avez installé et configuré nsh pour envoyer des commandes à une machine distante de manière sûre et pratique. nsh est un excellent moyen d’accéder à vos machines distantes lorsque vous devez exécuter rapidement une commande pour obtenir le dernier état d’un service ou jeter un coup d’œil à certains paramètres de configuration. L’application est basée sur le réseau public mondial de NKN, et son utilisation est gratuite. Vous pouvez donc l’intégrer dès aujourd’hui à votre propre application ou flux de travail.

      Vous pouvez également explorer nkn-tunnel, qui supporte SSH ou toute autre application basée sur TCP.



      Source link

      Como usar o nsh para executar comandos remotos seguros no Ubuntu 18.04


      Introdução

      Muitas vezes é difícil gerenciar várias máquinas em um banco de dados diariamente. Ainda que o Secure Shell (SSH) seja uma boa escolha para o acesso remoto, o protocolo em si possui alguns inconvenientes tanto em conveniência como em segurança.

      Por exemplo, máquinas remotas precisam ter um endereço IP público e uma porta redirecionada para acessá-los, o que os expõe à Internet, ou pelo menos a uma rede maior. Isso é especialmente preocupante caso use uma senha para autenticação em vez de um par de chaves público e privado. Além disso, caso não conheça a chave pública da máquina remota antecipadamente, você fica vulnerável a um ataque “man-in-the-middle”. E muitas máquinas remotas que você vai querer acessar não têm endereço IP público ou têm um endereço IP dinâmico que você não sabe.

      Além disso, o SSH exige uma conexão por sessão remota. Se um usuário precisa executar um único comando em centenas ou mesmo milhares de máquinas, é preciso primeiro estabelecer uma conexão com cada máquina com um handshake TCP, que é menos eficiente.

      O NKN Shell, ou nsh, é uma alternativa ao SSH que fornece uma maneira conveniente e segura de executar comandos remotos. O nsh aproveita a rede pública global do NKN, que fornece transmissão de dados segura e descentralizada. A arquitetura usa endereços únicos que contêm uma chave pública usada tanto para o roteamento quanto para a criptografia end-to-end sem nenhuma infraestrutura de chave pública (PKI). A rede também não exige que o servidor remoto tenha um endereço IP público. O servidor remoto precisa ter acesso à Internet e ser capaz de estabelecer conexões HTTP de saída e de websocket. Como resultado, suas máquinas remotas não são expostas à Internet aberta.

      Neste tutorial, você usará o daemon do NKN shell e o aplicativo Xterm do cliente NKN Shell para executar comandos em uma máquina remota. Para fazer isso, você instalará e configurará o daemon do NKN Shell em uma máquina remota com acesso à internet, gerará um par de chaves e fará sua conexão de um cliente.

      Pré-requisitos

      Para seguir este tutorial, você precisará do seguinte:

      Passo 1 — Instalando o NKN Shell em um servidor remoto

      Primeiro, instale o daemon do NKN shell (nsd) no seu servidor. Esse aplicativo invoca o nkn-multiclient, que se conectará à rede pública do NKN e receberá um endereço para o roteamento. Então, o daemon escutará comandos shell de entrada de clientes autenticados e listados, executará esses comandos e, em seguida, enviará os resultados de volta.

      Comece baixando os binários nshd pré-compilados do GitHub mais recentes:

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

      Descompacte o arquivo:

      • tar -zxvf linux-amd64.tar.gz

      Então, mova os arquivos para o diretório /usr/local/bin, para que eles estejam disponíveis em todo o sistema:

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

      Em seguida, você configurará isso para ser executado como um processo daemon usando o Systemd, para que ele seja reiniciado caso o servidor seja redefinido.

      Crie um arquivo chamado nshd.service em /etc/systemd/system:

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

      Adicione a seguinte definição de serviço ao arquivo para configurar o serviço:

      /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
      

      Saiba mais sobre arquivos de unidade do Systemd em Entendendo unidades do Systemd e arquivos de unidade.

      Salve o arquivo e saia do editor. Então, habilite e inicie o serviço nshd com os seguintes comandos:

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

      Execute o seguinte comando para garantir que o serviço esteja ativo e iniciado:

      • sudo systemctl status nshd.service

      Você verá que o status está ativo:

      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

      Para se conectar ao seu servidor, você precisará obter seu endereço NKN, que pode ser encontrado no resultado do comando anterior. Também é possível executar o seguinte comando para obter o endereço:

      Você verá seu endereço aparecer:

      Output

      e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

      Anote este endereço, uma vez que precisará dele para se conectar ao seu servidor.

      Agora que o daemon está em execução e escutando, é possível configurar o cliente baseado na Web para falar com o servidor.

      Passo 2 — Configurando as permissões para o cliente NKN Shell

      Você precisará de um cliente compatível que possa se conectar à máquina remota. Neste tutorial, você usará o cliente Xterm do NKN Shell, um cliente NKN shell baseado na Web. Há várias maneiras diferentes de executá-lo:

      Neste tutorial, você usará a versão hospedada. Na sua máquina local, abra o navegador Web e navegue até https://nsh.nkn.org. Você verá uma tela de boas vindas:

      O cliente do Shell

      Clique em Generate New Key Pair (Gerar novo par de chaves). Suas chaves serão geradas e exibidas como mostrado na imagem seguinte:

      O par de chaves gerado

      Nota: quando gerar um novo par de chaves, você verá um seed secreto. Mantenha esse seed secreto seguro, assim como você faria com sua chave privada SSH. Qualquer um que tenha esse seed secreto pode usá-lo para regenerar sua chave pública e, em seguida, executar comandos em suas máquinas remotas. Seu navegador se lembrará desse seed, mas você deve copiá-lo em um lugar seguro para que possa usá-lo novamente em uma nova máquina.

      Salve o seed secreto em um lugar seguro. É possível usá-lo mais tarde para regenerar sua chave pública para que você possa se conectar a partir de uma máquina de cliente diferente.

      Como trata-se de um novo par de chaves, é preciso adicionar a chave pública ao arquivo /etc/nshd/authorized_pubkeys no seu servidor.

      O /etc/nshd/authorized_pubkeys tem um papel semelhante ao arquivo ~/authorized_keys, que controla quais chaves públicas SSH podem fazer login. O arquivo authorized_pubkeys especifica qual usuário está associado a uma chave. Para fins de segurança, faça login usando um usuário não raiz neste tutorial, de modo que a chave pública gerada seja associada com seu usuário sammy criado no tutorial pré-requisito deste artigo, Configuração inicial de servidor.

      Para associar um usuário à chave pública, será necessário obter o ID de usuário (UID) e o ID de grupo (GID) deste usuário. Execute o seguinte comando no seu servidor, enquanto logado como o usuário sammy:

      Você verá o UID e o GID do usuário:

      Output

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

      Agora, abra o arquivo authorized_pubkeys no seu editor:

      • sudo nano /etc/nshd/authorized_pubkeys

      Adicione uma linha única que contenha a chave pública, UID e GID, separados por espaços:

      authorized_pubkeys

      5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
      

      Salve o arquivo.

      Verifique se o arquivo contém o conteúdo correto:

      • cat /etc/nshd/authorized_pubkeys

      Você verá sua chave impressa na tela:

      Output

      5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

      Então, reinicie o daemon nshd para aplicar as alterações:

      • sudo systemctl restart nshd.service

      Agora, vamos testá-lo. Para isso, conecte-se ao servidor e execute um comando.

      Passo 3 — Enviando um comando para a máquina remota e recebendo uma resposta

      No cliente NKN Shell, digite seu endereço remoto nshd do Passo 1, bem como um identificador de cliente opcional:

      O site nsh com o endereço remoto preenchido

      Clique em Connect (Conectar) para iniciar a conexão.

      Você se conectará à sua máquina remota e será exibido um prompt de terminal dentro do navegador. A partir daqui, use-o da mesma forma que o SSH. Por exemplo, execute o comando a seguir para alternar para o diretório /etc/nshd:

      Então, liste o conteúdo do diretório:

      Você verá o conteúdo dele:

      Output

      authorized_pubkeys wallet.json wallet.pswd

      Desconecte-se digitando exit. Quando precisar se reconectar, visite novamente a interface Web e digite seus detalhes de conexão. Caso gere um novo par de chaves, será necessário adicionar a nova chave pública ao seu servidor.

      Conclusão

      Neste tutorial, você instalou e configurou o nsh para enviar comandos de maneira segura e conveniente para uma máquina remota. O nsh é uma ótima maneira de acessar suas máquinas remotas quando você precisa executar rapidamente um comando para obter o status mais recente de um serviço ou espiar algumas definições de configuração. O aplicativo se baseia na rede pública global da NKN e é gratuito para usar. Dessa forma, você pode incorporá-lo no seu próprio aplicativo ou fluxo de trabalho hoje.

      Também é possível explorar o nkn-tunnel, que é compatível com o SSH ou qualquer outro aplicativo baseado no TCP.



      Source link