Dopo un po' di ricerca ecco il codice funzionante.
Librerie:
1) https://socket.io/
Questa libreria è utilizzata per trasmettere i pacchetti dal client al server.
2) https://github.com/staltz/xstream
Questa libreria è utilizzata per la visualizzazione del terminale.
3) https://github.com/mscdex/ssh2
Questa è la libreria principale utilizzata per stabilire una connessione con il tuo server remoto.
Passaggio 1:installa la libreria 3 nella cartella del progetto
Passaggio 2:inizia dal lato del nodo e crea un server.js
file per socket aperto
Passo 3:Collega il socket del client al server del nodo (entrambi sono nella macchina locale)
La logica complicata è come usare socket e ssh2.
All'emissione del socket è necessario attivare un comando SSH utilizzando la libreria ssh2. Alla risposta della libreria ssh2 (dal server) è necessario trasmettere il pacchetto socket al client. Questo è tutto.
Fai clic qui per trovare un esempio.
Quell'esempio avrà questi file e cartelle:
Type Name
------------
FILE server.js
FILE package.json
FOLDER src
FOLDER xtream
Per prima cosa devi configurare l'IP del tuo server, utente e password o file cert su server.js ed eseguire semplicemente node server.js
.
PS:non dimenticare di eseguire npm install
Fammi sapere se hai domande!
Dopo alcune ricerche in seguito mi sono imbattuto in questo servizio:https://tmate.io/ che fa perfettamente il lavoro. Tuttavia, se hai bisogno di un terminale di tmate basato sul Web, devi utilizzare i loro server ssh come proxy inverso, cosa con cui idealmente non mi sentivo a mio agio. Tuttavia, forniscono tmate-server che può essere utilizzato per ospitare il proprio server proxy inverso ma manca di interfaccia utente web. Ma per creare un sistema in cui devi accedere a un client dietro NAT su ssh sul Web, di seguito sono riportati i passaggi.
- Installa e configura tmate-server su una macchina cloud.
- Installa tmate sul lato client e configura per la connessione a una macchina cloud.
- Crea un'applicazione nodejs utilizzando xterm.js (facile grazie alla comunicazione basata su WebSocket) che si connette al tuo tmate-server e passa i comandi al rispettivo client. (Fai attenzione ai problemi di sicurezza dell'esposizione di questa applicazione, poiché passerai comandi Linux).
- A seconda del tuo caso d'uso potresti aver bisogno di un piccolo wrapper attorno al client tmate sul lato client per avviarlo/arrestarlo automaticamente o tramite un'interfaccia utente/azione manuale.
Nota:ho scritto un piccolo wrapper anche sul lato client per avviare/arrestare e trasmettere le informazioni richieste a un server API (scritto in nodejs) che poi passa le informazioni a un'altra API che collega il browser alla rispettiva sessione client . Poiché avevamo scritto questa applicazione, includeva l'autenticazione e le restrizioni sui comandi di ciò che può essere eseguito sul terminale. Puoi personalizzarlo molto.