Web ssh 选择

作为天平座的人,天生就是纠结的选择恐惧症重症患者!Orange PI Zero 折腾了一阵子了,因为这块板子没有显示接口,而且作为嵌入设备使用,只需要远程访问就行了。你们会说,直接 ssh 就好了!对,除了这个登录方案,也想把它 Web 化,只要知道 ip 就通过浏览器打开终端进行一些管理操作就好了。又 装B、又方便。

方案选择

web 上的 term 实现

纯纯的 javascript 实现的 web 浏览器中的 term UI 解决方案

要与服务器通讯要解决很多问题,这就意味着要重新造好多轮子!😂你懂的 ... 果断放弃

ttyd

基于 c 实现的,只能提供一个 shell command 实例,一旦实例进程结束,服务即销毁

gotty

gotty 基于 go 实现的,只能提供一个 shell command 实例,一旦实例进程结束,服务即销毁

php-ssh2-web-client

基于 php 实现的 ssh 客户端,用于通过 ssh 连接到服务端,需要 php 的 ssh 扩展支持呢!

WeTTY = Web + TTY.

基于 TypeScript 和 Nodejs 实现。看上去挺美好

亲自动手尝试了了下,结果...结果...折腾了2小时,没有成功!!!没有成功!!!

WebSSH

基于 Python 和 Nodejs。

最终选择的这个方案呢,原因,哈哈,因为安装真的很简单,易用,够用就好了嘛!

Luna

“露娜”?呵呵~ 这个是基于 Angular4 javascript 开发的。大名顶顶的开源堡垒机 JumpServer 中集成的就是这个解决方案呢。

这个,呵呵了,也没有折腾成功。

WebSSH 安装配置和使用

安装过程很简单,按照下面的步骤一步一步做就可以了。我使用的是 DietPi 上自带的 Python 3.5。

# 先安装 pip
apt install python3-pip python-pip
pip3 install setuptools
apt install libffi-dev
pip3 install cffi
apt install python3-dev python-dev

# 通过 pip 安装 webssh
pip3 install webssh --disable-pip-version-check

# 安装完会遇到 Exception: Error reading SSH protocol banner 的报错
# 修改库文件中的超时设置
vim /usr/local/lib/python3.5/dist-packages/paramiko/transport.py
# 修改其中的 banner_timeout 参数为 30

启动服务

wssh --address='0.0.0.0' --port=8000

其中 0.0.0.0 是不限制访问的主机 ip。 8000 为监听的服务端口号。这里我的 OrangePI 的 ip 是 192.168.1.100,0.0.0.0 也可以替换成 192.168.1.100,不换也可以。

登录服务

在同局域网中的另一个机器上,通过浏览器访问

http://192.168.1.100:8000/?hostname=192.168.1.100&username=root&password=PASSWORD

假设 password 是 OrangePI 真实登录密码,那 PASSWORD 就应该是 base64_encode(password) 的那个字符串了。

不带参数访问也是可以的,会直接打开一个登录页面,按表单中内容进行填写后,连接即可。

工作原理

官方提供的一个说明中的图示,原理也是蛮容易理解的。

+---------+     http     +--------+    ssh    +------------+
| browser | <==========> | webssh | <=======> | ssh server |
+---------+   websocket  +--------+    ssh    +------------+

参考

赞赏