用 Java 打造一款 SSH 客户端,这个太强了。。

article/2025/9/21 15:37:02

前言

最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用,当时看到了很多这方面的项目,例如:GateOne、webssh、shellinabox等。

这些项目都可以很好地实现webssh的功能,但是最终并没有采用,原因是在于这些底层大都是python写的,需要依赖很多文件,自己用的时候可以使用这种方案,快捷省事,但是做到项目中供用户使用时,总不能要求用户做到服务器中必须包含这些底层依赖,这显然不太合理,所以我决定自己动手写一个WebSSH的功能,并且作为一个独立的项目开源出来。(文末附项目开源地址)

技术选型

由于webssh需要实时数据交互,所以会选用长连接的WebSocket,为了开发的方便,框架选用SpringBoot,另外还自己了解了Java用户连接ssh的jsch和实现前端shell页面的xterm.js.所以,最终的技术选型就是 SpringBoot+Websocket+jsch+xterm.js。

这里推荐一个 Spring Boot 基础教程及实战示例:https://github.com/javastacks/spring-boot-best-practice

导入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.7.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
    <!-- Web相关 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- jsch支持 -->
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.54</version>
    </dependency>
    <!-- WebSocket 支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <!-- 文件上传解析器 -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
</dependencies>

一个简单的xterm案例

由于xterm是一个冷门技术,所以很多同学并没有这方面的知识支撑,我也是为了实现这个功能所以临时学的,所以在这给大家介绍一下。

xterm.js是一个基于WebSocket的容器,它可以帮助我们在前端实现命令行的样式。就像是我们平常再用SecureCRT或者XShell连接服务器时一样。下面是官网上的入门案例:

<!doctype html>
 <html>
  <head>
    <link rel="stylesheet" href="node_modules/xterm/css/xterm.css" />
    <script src="node_modules/xterm/lib/xterm.js"></script>
  </head>
  <body>
    <div id="terminal"></div>
    <script>
      var term = new Terminal();
      term.open(document.getElementById('terminal'));
      term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')
</script>
  </body>
 </html>

最终测试,页面就是下面这个样子:

可以看到页面已经出现了类似与shell的样式,那就根据这个继续深入,实现一个webssh。

后端实现

由于xterm只要只是实现了前端的样式,并不能真正地实现与服务器交互,与服务器交互主要还是靠我们Java后端来进行控制的,所以我们从后端开始,使用jsch+websocket实现这部分内容。最新面试题整理好了,点击Java面试库小程序在线刷题。

WebSocket配置

由于消息实时推送到前端需要用到WebSocket,不了解WebSocket的同学可以先去自行了解一下,这里就不过多介绍了,我们直接开始进行WebSocket的配置。

/**
* @Description: websocket配置
* @Author: NoCortY
* @Date: 2020/3/8
*/
@Configuration
@EnableWebSocket
public class WebSSHWebSocketConfig implements WebSocketConfigurer{
    @Autowired
    WebSSHWebSocketHandler webSSHWebSocketHandler;
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
        //socket通道
        //指定处理器和路径,并设置跨域
        webSocketHandlerRegistry.addHandler(webSSHWebSocketHandler, "/webssh")
                .addInterceptors(new WebSocketInterceptor())
                .setAllowedOrigins("*");
    }
}

处理器(Handler)和拦截器(Interceptor)的实现

刚才我们完成了WebSocket的配置,并指定了一个处理器和拦截器。所以接下来就是处理器和拦截器的实现。拦截器:


http://chatgpt.dhexx.cn/article/2PwqwZD2.shtml

相关文章

Java 打造一款 SSH 客户端,已开源~

来源&#xff1a;https://blog.csdn.net/NoCortY/article/details/104772431 前言 最近由于项目需求&#xff0c;项目中需要实现一个WebSSH连接终端的功能&#xff0c;由于自己第一次做这类型功能&#xff0c;所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用&#x…

官网下载最新版本Spring

目录 官网下载步骤官网下载地址 官网下载步骤 官网地址&#xff1a;https://spring.io/projects/spring-framework 1.点击右上角 Git 图标 2. 进入Spring的Git仓库 3. 进入Spring Framework Artifacts后点击"https://repo.spring.io" 4.进入Spring repository&a…

SSH框架整合demo

Struts、Spring、Hibernate整合 一、创建web工程&#xff0c;搭建Struts框架开发环境&#xff1a; 这里只导入了项目中所需要的重要的jar包&#xff0c;以后根据业务要求继续导入相关的包。 步骤1&#xff1a;:导入struts框架所需的jar包步骤2&#xff1a;在web.xml中配置stru…

Spring的下载

Spring是一个独立的框架&#xff0c;他不需要依赖于任何Web服务器或容器&#xff0c;既可以在独立的javaSE项目中使用&#xff0c;也可以在JavaEE项目中使用&#xff0c;在使用Spring之前需要获取它的JAR包&#xff0c;下面就是Spring下载的详细过程。 1.使用浏览器访问Spring…

Web SSH 客户端工具

webssh简介 如何在浏览器web页面登录我们的linux机器&#xff0c;这个工具是使用Python开发 官网&#xff1a;https://pypi.org/project/webssh/ webssh这个工具可以干啥&#xff1f;&#xff1f; 在linux机器上安装python环境&#xff0c;并且使用命令pip3 install webssh,…

web版ssh工具

本系统后端使用springboot框架&#xff0c;持久层使用mybatis&#xff0c;jsch实现ssh,sftp连接&#xff0c;前端使用xterm.js,vue&#xff0c;elementplus框架&#xff0c;使用vue3-sfc-loader加载vue文件&#xff0c;无需使用npm包管理器 系统登录 系统注册 登录后主机资源树…

SSH服务详解(七)– SSH 连接 Github

SSH 连接 Github SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动 SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录) SSH 服务详解 (三)-- 使用 SSH 代理 SSH 服务详解 (四)-- 本地调用远程主机的命令 SSH 服务详解 (五)-- 远程文件拷贝 SSH 服务详解 (六)--…

Java打造一款SSH客户端,已开源!

最近由于项目需求&#xff0c;项目中需要实现一个WebSSH连接终端的功能&#xff0c;由于自己第一次做这类型功能&#xff0c;所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用&#xff0c;当时看到了很多这方面的项目&#xff0c;例如&#xff1a;GateOne、webssh、she…

SSH框架---Spring官网下载各版本jar包

1:浏览器输入官网地址&#xff1a;http://spring.io/projects 2:点击如图树叶页面按钮。 3:点击如图小猫图片按钮。 4:查找downloading spring artifacts 链接点击。 5:查找Manually downloading Spring distributions 下面的 http://repo.spring.io.链接点击。 6:鼠标…

网页版ssh到服务器,Sshwifty 一款网页端SSH客户端程序

提起 ssh 客户端&#xff0c;每个人应该都会有自己所偏好的那一款。不过在某些情况下由于安全性或是便利性的原因&#xff0c;本地 ssh 客户端软件并不是那么的灵活好用。这时不如使用 Sshwifty 在远程服务器上搭建一个基于网页的 ssh 客户端程序&#xff0c;只需要打开浏览器便…

Web版SSH客戶端Sshwifty

昨晚收到居委会的通知&#xff0c;从今天开始起暂时不用每天做抗原了 上班的人一周起码要做三次核酸&#xff0c;就算不上班&#xff0c;买个菜也要 72 小时的核酸才能进店&#xff0c;再做抗原真的有点浪费 什么是 Sshwifty &#xff1f; Sshwifty 是为 Web 设计的 SSH 和 Tel…

springboot实现SSH客户端

springboot实现SSH客户端 参考网址 https://mp.weixin.qq.com/s?__bizMzAxNjk4ODE4OQ&mid2247498254&idx3&sn5c12442bd5b9f4f84a352cfaa4faeab1&chksm9beedb7cac99526aa3c6409ddcf6a9b9558d6c1ea0e8e1d9255a75b24f70b1eb2042ac94d54a&mpshare1&scene…

使用纯Java实现一个WebSSH项目

前言 最近由于项目需求&#xff0c;项目中需要实现一个WebSSH连接终端的功能&#xff0c;由于自己第一次做这类型功能&#xff0c;所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用&#xff0c;当时看到了很多这方面的项目&#xff0c;例如&#xff1a;GateOne、webss…

什么是 RPC 框架

rpc框架解释 谁能用通俗的语言解释一下什么是 RPC 框架&#xff1f; - 远程过程调用协议RPC&#xff08;Remote Procedure Call Protocol) 首先了解什么叫RPC&#xff0c;为什么要RPC&#xff0c;RPC是指远程过程调用&#xff0c;也就是说两台服务器A&#xff0c;B&#xff0…

Hadoop RPC简介

RPC&#xff08;Remote Procedure Call&#xff09;————远程过程调用协议 Hadoop RPC在Hadoop中应用非常广泛&#xff0c;Client、DataNode、NameNode之间的通讯全依赖于它 &#xff08;1&#xff09;它允许一台计算机程序远程调用另外一台计算机的子程序&#xff0c;而不…

RPC是什么

什么是rpc框架 先回答第一个问题&#xff1a;什么是RPC框架&#xff1f; 如果用一句话概括RPC就是&#xff1a;远程调用框架&#xff08;Remote Procedure Call&#xff09; 那什么是远程调用&#xff1f; 通常我们调用一个PHP中的方法&#xff0c;比如这样一个函数方法: local…

一分钟了解什么是RPC

前言 在介绍RPC之前&#xff0c;先介绍另外一个概念&#xff1a;进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09; IPC&#xff1a;是指至少两个进程或线程间传送数据或信号的一些技术或方法。 我们知道进程是计算机系统分配资源的最小单位。每…

【网络】什么是RPC?RPC与HTTP有什么关系?

文章目录 RPC是什么RPC和HTTP的关系和区别[附]关于REST论文中提到的"HTTP不是RPC" 重点参考 凤凰架构-远程过程调用 既然有HTTP为什么还要有RPC&#xff1f; RPC是什么 RPC(Remote Procedure Call)&#xff1a;即远程过程调用&#xff0c;目的是为了让计算机能够跟调…

电脑显示RPC服务器不可用是什么意思,rpc服务器不可用怎么办?rpc服务器不可用是什么意思...

很多人在使用打印机会都遇到rpc服务器不可用的问题&#xff0c;一时之间不知道rpc服务器不可用怎么办&#xff0c;无法作出有效的修复&#xff0c;为了解决一问题&#xff0c;我们首先要明白rpc服务器不可用是什么意思。 rpc服务器全称RPCremote procedure call&#xff0c;它是…

【网络】一文带你了解什么是RPC

一文带你了解什么是RPC 为什么要有RPC什么是RPCPRC架构组件RPC和SOA、SOAP、REST的区别RPC框架需要解决的问题?RPC的实现基础?RPC使用了哪些关键技术?主流RPC框架有哪些 为什么要有RPC http接口是在接口不多、系统与系统交互较少的情况下&#xff0c;初期常使用的一种通信手…