2017-08-28 68 views
18

Natknąłem się na tę niesamowitą bibliotekę xterm.js, która jest również podstawą terminala Visual Studio Code. Mam bardzo ogólne pytanie.Jak utworzyć terminal internetowy z użyciem xterm.js do ssh w systemie w sieci lokalnej

Chcę uzyskać dostęp do komputera (ssh do komputera) w sieci lokalnej za pośrednictwem terminalu opartego na Internecie (który jest poza siecią, może znajdować się na serwerze aws). Udało mi się to zrobić w sieci lokalnej, ale nie mogłem dojść do wniosku, aby zrobić to z Internetu -> sieci lokalnej.

Jako przykład - 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.

Czy powyższy przykład można osiągnąć za pomocą jakiegoś rozwiązania, gdzie mogę używać xterm.js tak, że nie trzeba iść na budowę terminalu internetowego w oparciu? Jakie są główne problemy związane z bezpieczeństwem, o których powinienem pamiętać podczas eksponowania terminali w ten sposób?

Zastanawiam się przy użyciu stałego serwera pośredniczącego między AWS a lokalną siecią ip i używam do tego jakiegoś procesu odwrotnego tunelu ssh, ale nie jestem pewien, czy jest to właściwy sposób, czy może prostszy/lepszy sposób na osiągnięcie tego.

Znam cyfrowy ocean, chmurę Google, wszyscy to robią, ale muszą połączyć się z komputerem, który ma publiczny adres IP, podczas gdy mam komputer w sieci lokalnej. Naprawdę nie chcę konfigurować routera, aby wykonać jakąkolwiek konfigurację.

+0

Nie wiem jak obecnie, ale dziękuję za xtremjs)) – Alex

Odpowiedz

8

Po kilku badaniach tutaj działa kod.

Po bibliotekach musisz zrozumieć, jak działa.

1) https://socket.io/

Biblioteka ta służy do nadawania pakietu od klienta do serwera.

2) https://github.com/staltz/xstream

Biblioteka ta służy do widoku panelu.

3) https://github.com/mscdex/ssh2

To jest Biblioteka Główna. który jest używany do nawiązywania połączenia z twoim serwerem zdalnym.

Krok 1: Instalacja tego 3 biblioteki w folderze projektu

SETP 2: Początek od strony węzła utworzyć plik server.js do otwartego gniazda

Krok 3: Podłączenie gniazda klient do węzła serwer (oba są w lokalnym komputerze)

Tricky logika jest po prostu jak używać gniazda i ssh2

na EMIT z gniazda trzeba wywołać ssh polecenie przy użyciu biblioteki ssh2.na na odpowiedź SSH2 (z serwera) trzeba przekazać pakiet gniazdo do klienta, to jest to

Nie pisać więcej tutaj jest kod przykład mam upload dla was

Download code

To jak mieć następujące pliki & foldery

server.js 
package.json 
src/ 
xtream/ 

najpierw trzeba config swoje IP serwera, użytkownika i hasło lub cert plik na server.js. i po prostu hit węzła server.js

P.S: Nie zapomnij uruchomić npm install

Daj mi znać, jeśli masz jakieś pytania!

+0

Dzięki Ankit, za tak dużą pomoc (pierwsza część przepływu była naprawdę pomocna). Testuję również kod tak szybko, jak to możliwe i dam ci znać. Przyjmie odpowiedź zbyt wcześnie –

+0

Pewnie .. proszę dać mi znać, jeśli masz jakiś problem lub pytanie. chętnie pomoże. Dzięki –

+0

Dzięki @Ankitvadariya. Kod działał idealnie po wprowadzeniu kilku zmian. Czy mógłbyś również opisać, jak podchodziłbyś do tego samego, jeśli masz 1) - liczba klientów Linuxa za NAT (które nie mają publicznego IP) 2) - serwer aws 3) - klient chce dać dostęp do serwera terminalowi Ponieważ klient znajduje się za NAT, serwer nie może bezpośrednio do niego ssh. Myślę, że możemy użyć klienta do ssh do serwera i użyć tunelu reverse ssh, aby uzyskać dostęp klienta, ale jaki byłby przepływ procesu i jak by działał. Czy można to zrobić, modyfikując powyższy kod? – kartik