Después de un poco de investigación aquí está el código de trabajo.
Bibliotecas:
1) https://socket.io/
Esta biblioteca se utiliza para transmitir paquetes del cliente al servidor.
2) https://github.com/staltz/xstream
Esta biblioteca se utiliza para la vista de terminal.
3) https://github.com/mscdex/ssh2
Esta es la biblioteca principal que se utiliza para establecer una conexión con su servidor remoto.
Paso 1:instala Library 3 en tu carpeta de proyecto
Paso 2:comience desde el lado del nodo y cree un server.js
archivo para socket abierto
Paso 3:Conexión del socket del cliente al servidor del nodo (ambos están en la máquina local)
La lógica complicada es cómo usar socket y ssh2.
En la emisión del socket, debe activar un comando SSH utilizando la biblioteca ssh2. En la respuesta de la biblioteca ssh2 (desde el servidor), debe transmitir el paquete de socket al cliente. Eso es todo.
Haga clic aquí para encontrar un ejemplo.
Ese ejemplo tendrá estos archivos y carpetas:
Type Name
------------
FILE server.js
FILE package.json
FOLDER src
FOLDER xtream
Primero debe configurar la IP de su servidor, el usuario y la contraseña o el archivo de certificado en server.js y simplemente ejecutar node server.js
.
P.D.:No olvides ejecutar npm install
¡Avísame si tienes alguna pregunta!
Después de investigar un poco más tarde, encontré este servicio:https://tmate.io/ que hace el trabajo perfectamente. Aunque si necesita un terminal de tmate basado en la web, debe usar sus servidores ssh como un proxy inverso con el que, idealmente, no me sentía cómodo. Sin embargo, proporcionan tmate-server que se puede usar para alojar su propio servidor proxy inverso pero carece de interfaz de usuario web. Pero para construir un sistema en el que tiene que acceder a un cliente detrás de NAT sobre ssh en la web, a continuación se encuentran los pasos.
- Instale y configure tmate-server en alguna máquina en la nube.
- Instale tmate en el lado del cliente y configúrelo para conectarse a una máquina en la nube.
- Cree una aplicación nodejs usando xterm.js (fácil debido a la comunicación basada en WebSocket) que se conecta a su servidor tmate y pasa comandos al cliente respectivo. (Tenga cuidado con los problemas de seguridad de exponer esta aplicación, ya que estará pasando comandos de Linux).
- Dependiendo de su caso de uso, es posible que necesite un pequeño envoltorio alrededor del cliente tmate en el lado del cliente para iniciarlo/detenerlo automáticamente o a través de alguna IU/acción manual.
Nota:también escribí un pequeño contenedor en el lado del cliente para iniciar/detener y pasar la información requerida a un servidor API (escrito en nodejs) que luego pasa la información a otra API que conecta el navegador a la respectiva sesión del cliente . Dado que habíamos escrito esta aplicación, incluía autenticación y restricciones de comando de lo que se puede ejecutar en la terminal. Puedes personalizarlo mucho.