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

问题描述 投票:23回答:1

我碰到这个真棒库xterm.js这也是Visual Studio代码的终端基础。我有一个非常普遍的问题。

我想通过基于Web的终端的本地网络上访问的机器(SSH成机器)(其是网络外的,可以是AWS服务器上)。我能做到这一点在本地网络中成功,但我无法达到一个结论,从互联网做 - >本地网络。

作为一个例子 - 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,而我在本地网络中有一台机器一台电脑。我真的不希望配置路由器做任何这种设置。

linux networking ssh-tunnel terminal-emulator xtermjs
1个回答
14
投票

一些研究后,在这里工作的代码。

以下库,你需要了解它的工作。

1)https://socket.io/

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

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

这个库用于终端视图。

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

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

第1步:在你的项目文件夹中安装此3库

SETP 2:从节点侧开始创建开放套接字server.js文件

步骤3:连接客户端套接字节点服务器(两者都是在本地机器)

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

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

不要写更多这里是示例代码

https://github.com/ankitvadariya/ssh-client-connection

这就像有下列文件和文件夹

server.js
package.json
src/
xtream/

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

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

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


0
投票

经过一番研究后,我遇到了这个服务:https://tmate.io/这完全没有工作。但如果你需要的tmate你必须用自己的SSH服务器作为反向代理在理想情况下我不舒服一个基于网络的终端。然而,他们提供可用于举办自己的反向代理服务器,但缺乏网络界面tmate服务器。但建,你必须通过ssh访问NAT后面的客户端上的网络系统,下面是步骤。

  • 安装和一些云计算机上配置tmate-server
  • 在客户端安装tmate和配置连接到云机。
  • 创建使用xterm.js(容易的,因为基于WebSocket的通信),它连接到您的tmate服务器一个应用程序的NodeJS和传递命令到相应的客户端。 (谨防暴露该应用程序的安全性问题,因为你会被路过的Linux命令)。
  • 根据您的使用情况,你可能需要在客户端围绕tmate客户端小包装来启动/自动或通过一些UI /手动操作停止。

注:我写了一篇关于客户端一个小包装,以及启动/停止和传递所需信息的API服务器(写的NodeJS),然后通过在其上浏览器连接到相应的客户端会话的信息到另一个API 。既然我们已经写了这个应用中包含的认证,以及什么可以在终端运行命令的限制。您可以自定义了很多。

© www.soinside.com 2019 - 2024. All rights reserved.