Je suis tombé sur cette bibliothèque géniale xterm.js qui est également la base du terminal de Visual Studio Code. J'ai une question très générale.
Je veux accéder à une machine (ssh dans une machine) sur un réseau local via un terminal Web (qui est hors réseau, peut être sur un serveur aws). J'ai pu le faire dans un réseau local avec succès, mais je n'ai pas pu parvenir à une conclusion pour le faire à partir d'Internet -> réseau local.
Par exemple - An aws server running the application on ip 54.123.11.98 which has a GUI with a button to open terminal. I want to open terminal of a local machine which is in a local network somewhere behind some public ip on local ip 192.168.1.7.
L'exemple ci-dessus peut-il être réalisé en utilisant une sorte de solutions où je peux utiliser xterm.js afin que je ne doive pas aller pour construire un terminal basé sur le Web? Quels sont les principaux problèmes de sécurité que je dois garder à l'esprit lors de l'exposition des terminaux de cette façon?
Je pensais utiliser un serveur intermédiaire fixe entre AWS et l'IP du réseau local et utiliser une sorte de processus de tunnel ssh inverse pour le faire, mais je ne sais pas si c'est la bonne façon ou s'il pourrait y avoir une manière plus simple/meilleure pour y parvenir.
Je connais Digital Ocean, Google Cloud, ils le font tous, mais ils doivent se connecter à un ordinateur qui a une adresse IP publique alors que j'ai une machine dans un réseau local. Je ne veux pas vraiment configurer le routeur pour faire n'importe quel type d'installation.
Après quelques recherches, le code fonctionne.
Les bibliothèques suivantes, vous devez comprendre comment son travail.
Cette bibliothèque est utilisée pour transmettre le package du client au serveur.
2) https://github.com/staltz/xstream
Cette bibliothèque est utilisée pour la vue du terminal.
3) https://github.com/mscdex/ssh2
Ceci est la bibliothèque principale. qui est utilisé pour établir la connexion avec votre serveur distant.
Étape 1: installez cette bibliothèque 3 dans votre dossier de projet
Setp 2: Commencez du côté du nœud créez un fichier server.js pour le socket ouvert
Étape 3: connexion du client de connexion au serveur de noeud (les deux se trouvent sur la machine locale)
La logique délicate est juste comment utiliser socket et ssh2
lors de l'émission de socket, vous devez déclencher la commande ssh à l'aide de la bibliothèque ssh2. sur la réponse de ssh2 (du serveur), vous devez transmettre le package de socket au client c'est tout
Ne pas écrire plus ici est l'exemple de code
https://github.com/ankitvadariya/ssh-client-connection
Cela comme avoir les fichiers et dossiers suivants
server.js
package.json
src/
xtream/
vous devez d'abord configurer l'adresse IP, l'utilisateur et le mot de passe de votre serveur ou le fichier cert sur server.js. et appuyez simplement sur le nœud server.js
P.S: N'oubliez pas d'exécuter npm install
Faites-moi savoir si vous avez des questions!
Après quelques recherches plus tard, je suis tombé sur ce service: https://tmate.io/ qui fait parfaitement le travail. Cependant, si vous avez besoin d'un terminal Web de tmate, vous devez utiliser leurs serveurs ssh comme proxy inverse, ce qui, idéalement, ne me convenait pas. Cependant, ils fournissent tmate-server qui peut être utilisé pour héberger votre propre serveur proxy inverse, mais il manque l'interface utilisateur Web. Mais pour construire un système où vous devez accéder à un client derrière NAT via ssh sur le web, voici les étapes.
Remarque: j'ai également écrit un petit wrapper côté client pour démarrer/arrêter et transmettre les informations requises à un serveur API (écrit en nodejs) qui transmet ensuite les informations à une autre API qui connecte le navigateur à la session client respective . Depuis que nous avons écrit cette application, elle comprenait l'authentification ainsi que des restrictions de commande de ce qui peut être exécuté sur le terminal. Vous pouvez le personnaliser beaucoup.