如何使用xterm.js创建基于web的终端ssh到本地网络上的系统

问题描述:

我遇到了这个令人敬畏的库xterm.js,这也是Visual Studio Code的终端的基础。我有一个非常普遍的问题。如何使用xterm.js创建基于web的终端ssh到本地网络上的系统

我想通过基于Web的终端(它不在网络中,可能位于aws服务器上)在本地网络*问机器(ssh到机器)。我能够在本地网络中成功完成此操作,但无法通过Internet - >本地网络得出结论。

为例 - 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.

可以在上面的例子中使用某种解决方案,在那里我可以使用xterm.js的,这样我就不必去构建一个基于网络终端能实现吗?以这种方式暴露终端时,我应该牢记的主要安全问题是什么?

我在考虑使用AWS和本地网络ip之间的固定中间服务器,并使用某种反向ssh隧道进程来做到这一点,但我不确定这是正确的方式还是可能存在更简单/更好的方式来实现这一点。

我知道数字海洋,谷歌云,他们都这样做,但他们必须连接到具有公共IP的计算机,而我在本地网络中有一台机器。我真的不想配置路由器做任何设置。

+0

我不知道目前如何,但谢谢你的xtremjs)) – Alex

经过少数研究,这里是工作代码。

以下图书馆您需要了解它的工作方式。

1)https://socket.io/

该库用于发射包从客户机到服务器。

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

该库用于终端视图。

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

这是主库。用于与远程服务器建立连接。

第1步: 连接客户端套接字节点: 开始从节点侧为开放式插槽

第3步创建一个server.js文件: 在项目文件夹

SETP 2安装此3库服务器(都是在本地机器)

棘手的逻辑仅仅是如何使用插座和SSH2

插座上的EMIT需要触发SSH命令使用ssh2库。上SSH2(从服务器)的响应,你需要套接字包传送到客户端,就是这样

不要写更多的这里是示例代码我已经上传你

Download code

这就像有下列文件夹&

server.js 
package.json 
src/ 
xtream/ 

首先你需要配置你的服务器IP,在server.js用户名和密码或证书文件。和刚打节点server.js

P.S:不要忘了运行npm install

让我知道如果您有任何问题!

+0

感谢Ankit,这么多的帮助(流程的第一部分真的很有帮助)。我会尽快测试代码并通知您。将尽快接受答案 –

+0

当然..如果您有任何问题或疑问,请让我知道。乐于帮助。谢谢 –

+0

谢谢@Ankitvadariya。代码在完成一些更改后完美运行。 你也可以描述你将如何接近同样的事情,如果你有 你有 1) - 背后NAT的一些Linux客户端(它没有公共IP) 2) - aws服务器 3) - 客户想要让服务器访问其终端 由于客户端在NAT后面,服务器不能直接SSH到它。我认为我们可以使用客户端ssh到服务器并使用反向ssh隧道来获取客户端访问权限,但流程的流程以及它将如何工作。可以通过修改上面的代码来做到这一点吗? – kartik