不用安装Xshell、Xftp,即可远程操作服务器,看看黑科技Spring Boot ...
程序员私房菜
共 1232字,需浏览 3分钟
· 2021-02-05
“失败是什么?没有什么,只是离成功更近了一步,奥利给,加油🐤。
前言
扩展:什么是堡垒机
实现
依赖
相关截图
登录
命令执行
文件列表、删除、下载
文件上传
前言
之前讲过,我现在在一家国企上班,由于集团网络环境是封闭的内网,平时的部署上线,日志排查是通过一个跳板堡垒机去连接内网机器,大致情况如下图:
![20b403fde0086034c80461ff2b64345e.webp](https://filescdn.proginn.com/d86533d5d46dd1eca054167de1d8170a/20b403fde0086034c80461ff2b64345e.webp)
以及联想到Alibaba开源的Java诊断工具Arthas
,其Web Console在浏览器上就可以执行命令,操作简单,界面也非常的nice。
![9fa520e6c30e7f4cd6dc430fcfc10fb4.webp](https://filescdn.proginn.com/7295aa4b4510757e084fd1b1032c6c68/9fa520e6c30e7f4cd6dc430fcfc10fb4.webp)
然后就想着去实现一个自己的Web SSH,去探究其内部的原理。
扩展:什么是堡垒机
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。
“来自百度百科
实现
webssh泛指一种技术可以在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接,将SSH这一比较低层的操作也从C/S架构扭成了B/S架构。
工作原理
+---------+ http +--------+ ssh +-----------+
| browser | <==========> | webssh | <=======> | ssh server|
+---------+ websocket +--------+ ssh +-----------+
WebSocket
长连接,用于指令发送和响应的实时交互xterm.js
是一个基于WebSocket的容器,它可以帮助我们在前端实现命令行的样式。JSch
是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。
实现功能
- 命令执行
- 文件上传/下载
相关代码
依赖
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.7.RELEASEversion>
<relativePath />
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.jcraftgroupId>
<artifactId>jschartifactId>
<version>0.1.54version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-websocketartifactId>
dependency>
dependencies>
相关截图
登录
![89b876594d048cb583efe1f49bd184de.webp](https://filescdn.proginn.com/424373508303c2fa56e862ba215d263d/89b876594d048cb583efe1f49bd184de.webp)
命令执行
![50082e98abcbb5f690edb946242ef38b.webp](https://filescdn.proginn.com/f86d9943561e3b65650bbf8d0630a36c/50082e98abcbb5f690edb946242ef38b.webp)
文件列表、删除、下载
![2ddc5b3cd437e2832cf17d3459f9e8fc.webp](https://filescdn.proginn.com/4b348745e6486a078c205078aa64b80f/2ddc5b3cd437e2832cf17d3459f9e8fc.webp)
文件上传
![6927fd1e01aaf6f50591aa564c0eb27e.webp](https://filescdn.proginn.com/617e2e49450ee9ccccdcda0e9b80017b/6927fd1e01aaf6f50591aa564c0eb27e.webp)
由于相关实现较为简单,只要看下JSch
和xterm.js
即可实现,还能自由扩展相关功能。
参考:
https://blog.csdn.net/NoCortY/article/details/104772431
关注Java开发宝典
每天进步一点点
点赞是最大的支持
评论