浅谈springboot整合ganymed-ssh2远程访问linux

环境介绍

技术栈

springboot+mybatis-plus+mysql+ganymed-ssh2

软件

版本

mysql

8

IDEA

IntelliJ IDEA 2022.2.1

JDK

1.8

Spring Boot

2.7.13

mybatis-plus

3.5.3.2

SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。

加入依赖

<!-- shell认证支持 --><dependency><groupId>ch.ethz.ganymed</groupId><artifactId>ganymed-ssh2</artifactId><version>262</version></dependency>

测试类

@Testvoid sshdemo() throws IOException {InputStream inputStream = null;StringBuilder result = new StringBuilder();Connection conn=new Connection("192.168.68.133",22); //远程连接的ip 和端口conn.connect();if (conn.authenticateWithPassword("root", "111111")){System.out.println("登录成功");Session session = conn.openSession();//获取CPU使用率session.execCommand("df -h| awk '$NF==\"/\"{printf \"%d/%dGB 使用率(%s)\",$3,$2,$5}'");inputStream = session.getStdout();result = this.processStdout(inputStream);System.out.println(result.toString());//关闭连接conn.close();}else {System.out.println("连接失败");}}

编写通用实体类

package com.example.domain;


import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import lombok.Data;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

@Data
public class SSHConnectionMethod {
    /* 连接器 */
    private Connection connect;
    /* 主机(IP) */
    private String host;
    /* 连接端口 */
    private  int port;
    /* 编码 */
    private Charset charset;
    /* 用户 */
    private String user;
    /* 密码 */
    private String password;
    /**
     * 登录Centos主机方法
     */
    private boolean login() {
        connect = new Connection(host,port);
        try {
            connect.connect();
            return connect.authenticateWithPassword(user, password);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 获取返回信息
     */
    public StringBuilder getBackInfo(InputStream in) {
        byte[] buf = new byte[1024];
        StringBuilder builder = new StringBuilder();
        try {
            int length;
            while ((length = in.read(buf)) != -1) {
                builder.append(new String(buf, 0, length));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return builder;
    }

    /**
     * 执行shell命令
     */
    public StringBuilder exec(String shell) throws IOException {
        InputStream inputStream = null;
        StringBuilder result = new StringBuilder();
        try {
            // 认证登录信息
            if (this.login()) {
                // 登陆成功
                Session session = connect.openSession();
                session.execCommand(shell);
                inputStream = session.getStdout();
                result = this.getBackInfo(inputStream);
                connect.close();
            }
        } finally {
            if (null != inputStream) {
                inputStream.close();
            }
        }
        return result;
    }
}

测试类

@Test
void sshdemo01()throws IOException{SSHConnectionMethod sshConnectionMethod = new SSHConnectionMethod();sshConnectionMethod.setHost("192.168.68.133");sshConnectionMethod.setPort(22);sshConnectionMethod.setUser("root");sshConnectionMethod.setPassword("111111");StringBuilder backResult = sshConnectionMethod.exec("df -h| awk '$NF==\"/\"{printf \"%d/%dGB 使用率(%s)\",$3,$2,$5}'");System.out.println(backResult);
}

ssh服务端由2部分组成: openssh(提供ssh服务)    openssl(提供加密的程序)
ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接

SSH的工作机制
服务器启动时产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。
    1.远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
    2.Client使用这个公钥,将密码进行加密。
    3.Client将加密的密码发送给Server端。
    4.远程Server用自己的私钥,解密登录密码,然后验证其合法性。
    5.若验证结果,给Client相应的响应

SSH的加密技术
加密技术:传输过程,数据加密。            
1.SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码
2.SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。                   
  SSH2支持RSA和DSA密钥   
  DSA:digital signature Algorithm  数字签名
  RSA:既可以数字签名又可以加密   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/297414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA控制台乱码

报错情况&#xff1a; 报错原因&#xff1a;Idea的vm用的编码格式不一致&#xff1a;需要修改为UTF-8 你看Tomcat我之前下在后修改果&#xff0c;就没有报错&#xff0c;新人刚下载也有乱码问题 问题解决&#xff1a; 按我步骤来一定对 下面这俩文件打开输入&#xff1a; -D…

VSCode中配置prettier和ESLint

文章目录 了解ESLint和Prettier的作用prettier配置ESLint配置常见问答ESLint 和Prettier 有什么区别&#xff1f;为什么我应该同时使用ESLint 和Prettier&#xff1f;在使用ESLint 和Prettier 时&#xff0c;有可能出现它们之间的规则冲突吗&#xff1f;我已经在项目中使用了ES…

jvm对象探究

hostpot虚拟机对象探究 jvm虚拟机创建对象的流程 ava虚拟机&#xff08;JVM&#xff09;创建对象的过程包括以下步骤&#xff1a; 类加载&#xff1a; 首先&#xff0c;JVM会检查对象的类是否已经被加载。如果该类还没有被加载&#xff0c;JVM会通过类加载器加载该类的字节码…

每日一题——LeetCode888

方法一 个人方法&#xff1a; 交换后要达到相同的数量&#xff0c;那么意味着这个相同的数量就是两个人总数的平均值&#xff0c;假设A总共有4个&#xff0c;B总共有8个&#xff0c;那么最后两个人都要达到6个&#xff0c;如果A的第一盒糖果只有1个&#xff0c;那么B就要给出6…

四、Spring IoC实践和应用(基于配置类方式管理 Bean)

本章概要 基于配置类方式管理 Bean 完全注解开发理解实验一&#xff1a;配置类和扫描注解实验二&#xff1a;Bean定义组件实验三&#xff1a;高级特性&#xff1a;Bean注解细节实验四&#xff1a;高级特性&#xff1a;Import扩展实验五&#xff1a;基于注解配置类方式整合三层…

域内定位个人PC的三种方式(1)

会话搜集 在cmd下调用query session命令可以获得当前环境下的windows会话 NetSessionEnum 这个函数不允许直接查询是谁登陆&#xff0c;但是它允许查询是谁在访问此工作站的网络资源时所创建的网络会话&#xff0c;从而知道来自何处&#xff0c;此函数不需要高权限即可查询 第…

漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

EA常见画图(类图、包图、构件图、状态图、顺序图、活动图)

EA常见活动图&#xff0c;状态图画法 类图:111&#xff08;1&#xff09;给关系添加注释&#xff08;2&#xff09;设置关系线样式 包图&#xff1a;&#xff08;1&#xff09;创建包图&#xff08;2&#xff09;在包中添加子包&#xff1a;&#xff08;3&#xff09;在包中添加…

【C->Cpp】深度解析#由C迈向Cpp(2)

目录 &#xff08;一&#xff09;缺省参数 全缺省参数 半缺省参数 缺省参数只能在函数的声明中出现&#xff1a; 小结&#xff1a; &#xff08;二&#xff09;函数重载 函数重载的定义 三种重载 在上一篇中&#xff0c;我们从第一个Cpp程序为切入&#xff0c;讲解了Cpp的…

关于标准库中的 stack / queue / 优先级队列(涉及部分仿函数,deque)

目录 1.stack的介绍 2.queue的介绍 3.优先级队列&#xff08;堆&#xff09; 4.deque&#xff08;双端队列&#xff09; 1.stack的介绍 stack的文档介绍 翻译: 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器…

商业版SEO关键词按日计费系统:关键词排名优化、服务咨询、手机自适应+安装教程

源码介绍 系统安装(推荐安装宝塔) 添加站点时&#xff0c;搭建后&#xff0c;到宝塔网站列表点设置&#xff0c;网站目录&#xff0c;设置运行目录为 public 数据库配置 网站根目录下 .env 文件设置数据库信息 HOSTNAME 127.0.0.1 DATABASE 数据库名 USERNAME 数据库用户名…

Matlab论文插图绘制模板第132期—函数等高线填充图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 函数等高线图&#xff1a; 进一步&#xff0c;再来分享一下函数等高线填充图。 先来看一下成品效果&#xff1a; 特…