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

举报
QGS 发表于 2023/12/24 21:18:53 2023/12/24
【摘要】 浅谈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>



测试类


@Test
        void 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;

/**
 * @author QGS
 * @version 1.0.0
 * @date 2023年12月24日 17:24:18
 * @packageName com.example.domain
 * @className SSHRegisterEntity
 * @describe TODO
 */
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);
}







【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。