背景:系统上线了,正式环境服务器的一些硬件数据需要监控。写一个小工程,调取服务器的硬件使用信息。有页面展示,有定时数据采集。结局方式定为在LINUX服务器端设置脚本采集数据。通过JAVA端SSH连接获取采集结果。
JAVA端要和LINUX交互,采用的方式是ganymed ssh2。导入ganymed-ssh2-build210.jar之后,看了看例子,连接方式还算比较清晰。
首先先做一个封装,形成一个基础的Client端。
1.通过login方法获得连接实例
2.通过execShellCommand方法执行LINUX命令,并返回结果为字符串
3.closeConnection释放连接。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public final class SSHGanymedUtil { private String hostname; private int port; private String username; private String password; private long taskId; private Connection connection; public SSHGanymedUtil(String _hostname, int _port, String _username, String _password) { this.hostname = _hostname; this.port = _port; this.username = _username; this.password = _password; } public SSHGanymedUtil(String _hostname, int _port, String _username, String _password, Long id) { this(_hostname, _port, _username, _password); this.taskId = id; } public void login() throws Exception { System.out.println("start task id is " + taskId); // 建立连接 connection = new Connection(hostname, port); try { // 连接上 connection.connect(); // 进行校验 boolean isAuthenticated = connection.authenticateWithPassword( username, password); System.out.println("isAuthenticated = " + isAuthenticated); if (isAuthenticated == false) throw new IOException("Authentication failed."); } catch (Exception e) { e.printStackTrace(); throw new Exception("UserOrPasswordError"); } } public String execShellCommand(final String command){ Session sess = null; StringBuilder sb = new StringBuilder(); try{ sess = connection.openSession(); sess.execCommand(command); InputStream stdout = new StreamGobbler(sess.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); while (true) { String line = br.readLine(); if (line == null) break; sb.append(line); } } catch (Throwable e) { e.printStackTrace(); } finally { // 关闭通道 if (sess != null) sess.close(); } return sb.toString(); } public void closeConnection() { System.out.println("end task id is " + taskId + "disconnet"); if (connection != null) connection.close(); } public String getHostname() { return hostname; } public void setHostname(String hostname) { this.hostname = hostname; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
应用方式
SSHGanymedUtil ssh = new SSHGanymedUtil(IP,PORT,ROOT,PWD); try { ssh.login(); } catch (Exception e) { e.printStackTrace();//连接异常要捕获 } String result = ssh.execShellCommand(COMMAND);//执行命令,返回结果 ssh.closeConnection();//得到结果及时释放连接
另外附上linux端脚本
#!/bin/bash echo "mysql;" mysql_status=`netstat -tnul | grep -v "grep" | grep "3306" | wc -l` if [ $mysql_status -eq 1 ] then echo "mysql:up;" else echo "mysql:down;" fi echo "ip:`ifconfig | grep 'inet addr:'|awk 'NR==1{print $2}'|awk -F: '{print $2}'`;" echo "disk:`df -h |awk 'NR==2 {print $5}'`;" echo "mem:`free -m | sed -n '2p' | awk '{print $3/$2*100"%"}'`;" echo "cpu:`/usr/bin/vmstat | tail -1 | awk '{print 100-$15}'`;" Cpu_num=`grep -c "model name" /proc/cpuinfo` Cpu_15_load=`uptime | awk -F "," '{print $NF}' | cut -f 1 -d "."` echo "cpu I/O:$Cpu_15_load;"
相关推荐
5. **执行远程命令**:使用Ganymed SSH-2库,开发者可以在Java代码中直接执行远程主机上的命令,这对于自动化运维、远程监控或者分布式系统中的数据交换非常有用。 在使用Ganymed SSH-2库时,开发者需要创建`...
标题中的“ganymed-ssh2-262.jar”是一个特定版本的SSH2库,由Ganymed项目提供,用于Java环境下的SSH(Secure Shell)连接。SSH是一种网络协议,常用于安全地远程登录到服务器、传输文件以及执行命令。Ganymed SSH2...
《Ganymed SSH2 Build 250详解与应用》 Ganymed SSH2是一个开源的Java库,用于实现Secure Shell (SSH2)协议,允许Java应用程序进行安全的远程登录、文件传输以及各种安全网络服务。这个库的名字来源于希腊神话中的 ...
Java 远程连接 Linux 服务器使用 Ganymed-SSH2 库 标题解释 本文档的标题是"Java 运用 Ganymed-SSH2 库远程连接操作 Linux 服务器",这意味着我们将使用 Java 语言来远程连接 Linux 服务器,并使用 Ganymed-SSH2...
在Java开发中,Ganymed SSH-2库提供了一套完整的API,使开发者能够轻松地集成SSH功能到他们的应用程序中。这个库不仅支持SSH连接,还包含了对SFTP(Secure File Transfer Protocol)的支持,使得在客户端和服务器...
ganymed-ssh2是一个开源Java库,它提供了对SSH2协议的全面支持,使得开发人员能够在Java应用程序中轻松地进行远程操作,如执行命令、传输文件等。本文将深入探讨ganymed-ssh2工具类的使用及其核心功能。 ** SSH连接...
这个库名为ganymed-ssh2-build,它允许Java应用程序与远程服务器建立SSH连接,执行命令,传输文件等。 Ganymed SSH-2库是由ETH Zurich(瑞士苏黎世联邦理工学院)开发的,它的主要类包括`ch.ethz.ssh2.Connection`...
解决openssh升级到8.2以后无法登录的问题,支持jdk1.5及以上版本
Java通过ganymed-ssh2-build210.jar库实现SSH远程连接Linux终端是一个常见的应用场景,主要用于自动化运维、系统管理或者开发过程中需要与Linux服务器交互的场景。ganymed-ssh2-build210.jar是Java的一个开源SSH库,...
在实际应用中,开发者可能会遇到各种场景,例如自动部署、远程监控、文件同步等,Ganymed SSH2库都能提供相应的解决方案。例如,通过创建一个`Session`对象并调用其`execCommand()`方法,可以执行远程主机上的任意...
下载网站https://repo1.maven.org/maven2/ch/ethz/ganymed/ganymed-ssh2/build210/ 此jar源码文件中包含以下这些类: SCPClient.lass Session.class Connection.clss 等许多文件传输类。 查看源码的方法: 1.把此jar...
"示例"是实际应用的演示,它们展示了如何在实际项目中使用ganymed-ssh2,帮助开发者快速入门,减少摸索的时间。示例代码通常涵盖基本功能,如建立连接、执行命令,甚至可能包含更复杂的操作,如端口转发和文件传输。...
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些...
ganymed-ssh2-build210.jiar文件是这个项目的构建结果,很可能是一个包含所有必要类和资源的Java归档(JAR)文件,允许开发者在他们的应用程序中集成SSH2功能。SSH2是一种安全的网络协议,用于在不同系统之间提供...
在java里可以通过Ganymed SSH-2, Expect4j等实现ssh登录,由于Ganymed SSH-2是纯java实现,并且可以实现scp,sftp等,因此我们采用Ganymed SSH-2
ganymed-ssh2 ,java支持ssh协议的jar包