URL: https://www.progressiverobot.com/how-to-use-nsh-to-run-secure-remote-commands-on-ubuntu-18-04-fr/

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

nsh illustration for: Conditions préalables

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

  • Un navigateur Web installé sur votre machine locale.

É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 :

				
					
[label /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 :

				
					
[secondary_label 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 :

				
					
nshd addr

				
			

Vous verrez apparaître votre adresse :

				
					
[secondary_label 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.

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 :

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 :

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 :

				
					
id

				
			

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

				
					
[secondary_label Output]

uid=&lt;^&gt;1000&lt;^&gt;(&lt;^&gt;sammy&lt;^&gt;) gid=&lt;^&gt;1000&lt;^&gt;(&lt;^&gt;sammy&lt;^&gt;) 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 :

				
					
[label 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 :

				
					
[secondary_label Output]

&lt;^&gt;5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000&lt;^&gt;

				
			

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 :

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 :

				
					
cd /etc/nshd

				
			

Ensuite, dressez la liste de son contenu :

				
					
ls

				
			

Vous verrez le contenu de l'annuaire :

				
					
[secondary_label 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.