需求说明
日前因为工作,需要在浏览器网页上访问服务器终端进行操作,这种情况在使用阿里云等平台时经常会使用到,最近项目需要实现这个功能,就做了一番调研。偶然间发现jupyterlab平台上就有这个功能
环境说明
操作系统:ubuntu18
python版本:3.6
详情
本次测试的软件是webssh
这个软件是一个简单的 Web 应用程序,用于ssh 客户端连接到 ssh 服务器的工具。它是用 Python 编写的,基于 tornado、paramiko 和 xterm.js。
其中的xterm.js是前端用于展示终端页面的项目,也是本项目的一个核心。
安装
pip install webssh
启动
wssh --address='hostip' --port=8000
实现原理
±--------+ http ±-------+ ssh ±----------+
| browser | <====> | webssh | <=> | ssh server|
±--------+ websocket ±-------+ ssh ±----------+
从上看出 webssh启动后作为web服务运行着,浏览器发起http请求得到如下页面
填入要连接的服务器对应信息后点击connect,在network中可以看到响应信息
其中的id用来创建websocket连接
此时就已经进入了终端页面如下所示:
这种模式的本质是ssh连接,要求服务端的sshd服务必须正常开启,且能访问,否则是无法通过该方式进入服务器的。
更多使用详见 https://github.com/huashengdun/webssh
需要提一下的是xterm.js是众多软件实现该功能的基础软件,如vscode、jupyterlab等,更多的可以看github上