浅谈springboot整合ganymed-ssh2远程访问linux
【摘要】 浅谈springboot整合ganymed-ssh2远程访问linux
环境介绍
技术栈 |
springboot+mybatis-plus+mysql+ganymed-ssh2 |
软件 |
版本 |
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)