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.
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
sudo
activé et un pare-feu.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 :
[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 :
- nshd addr
Vous verrez apparaître votre adresse :
Outpute70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383
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.
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 :
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 :
Outputuid=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 :
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 :
Output5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 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.
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 :
Outputauthorized_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.
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.
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!