`
ft4453080
  • 浏览: 14274 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

ganymed ssh2的监控应用

阅读更多

        背景:系统上线了,正式环境服务器的一些硬件数据需要监控。写一个小工程,调取服务器的硬件使用信息。有页面展示,有定时数据采集。结局方式定为在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;"

 

 

分享到:
评论

相关推荐

    Ganymed SSH-2 for Java

    5. **执行远程命令**:使用Ganymed SSH-2库,开发者可以在Java代码中直接执行远程主机上的命令,这对于自动化运维、远程监控或者分布式系统中的数据交换非常有用。 在使用Ganymed SSH-2库时,开发者需要创建`...

    ganymed-ssh2-262.jar

    标题中的“ganymed-ssh2-262.jar”是一个特定版本的SSH2库,由Ganymed项目提供,用于Java环境下的SSH(Secure Shell)连接。SSH是一种网络协议,常用于安全地远程登录到服务器、传输文件以及执行命令。Ganymed SSH2...

    ganymed-ssh2-build250.rar,jar包,源码,例子,javadoc

    《Ganymed SSH2 Build 250详解与应用》 Ganymed SSH2是一个开源的Java库,用于实现Secure Shell (SSH2)协议,允许Java应用程序进行安全的远程登录、文件传输以及各种安全网络服务。这个库的名字来源于希腊神话中的 ...

    Java运用ganymed-ssh2-build210.jar包远程连接操作linux服务器

    Java 远程连接 Linux 服务器使用 Ganymed-SSH2 库 标题解释 本文档的标题是"Java 运用 Ganymed-SSH2 库远程连接操作 Linux 服务器",这意味着我们将使用 Java 语言来远程连接 Linux 服务器,并使用 Ganymed-SSH2...

    ganymed-ssh2-build

    ganymed-ssh2-build210.jiar文件是这个项目的构建结果,很可能是一个包含所有必要类和资源的Java归档(JAR)文件,允许开发者在他们的应用程序中集成SSH2功能。SSH2是一种安全的网络协议,用于在不同系统之间提供...

    ganymed-ssh2-build210

    在Java开发中,Ganymed SSH-2库提供了一套完整的API,使开发者能够轻松地集成SSH功能到他们的应用程序中。这个库不仅支持SSH连接,还包含了对SFTP(Secure File Transfer Protocol)的支持,使得在客户端和服务器...

    ganymed-ssh2 工具类

    ganymed-ssh2是一个开源Java库,它提供了对SSH2协议的全面支持,使得开发人员能够在Java应用程序中轻松地进行远程操作,如执行命令、传输文件等。本文将深入探讨ganymed-ssh2工具类的使用及其核心功能。 ** SSH连接...

    ssh协议依赖jar包:ganymed-ssh2-build

    这个库名为ganymed-ssh2-build,它允许Java应用程序与远程服务器建立SSH连接,执行命令,传输文件等。 Ganymed SSH-2库是由ETH Zurich(瑞士苏黎世联邦理工学院)开发的,它的主要类包括`ch.ethz.ssh2.Connection`...

    ganymed-ssh2-263.jar

    解决openssh升级到8.2以后无法登录的问题,支持jdk1.5及以上版本

    ganymed-ssh2-build261.jar,还有源码

    在实际应用中,开发者可能会遇到各种场景,例如自动部署、远程监控、文件同步等,Ganymed SSH2库都能提供相应的解决方案。例如,通过创建一个`Session`对象并调用其`execCommand()`方法,可以执行远程主机上的任意...

    ganymed-ssh2.rar

    "示例"是实际应用的演示,它们展示了如何在实际项目中使用ganymed-ssh2,帮助开发者快速入门,减少摸索的时间。示例代码通常涵盖基本功能,如建立连接、执行命令,甚至可能包含更复杂的操作,如端口转发和文件传输。...

    ganymed-ssh2 远程连接java实例代码

    Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些...

    ganymed-ssh2-build210-sources.jar.zip

    下载网站https://repo1.maven.org/maven2/ch/ethz/ganymed/ganymed-ssh2/build210/ 此jar源码文件中包含以下这些类: SCPClient.lass Session.class Connection.clss 等许多文件传输类。 查看源码的方法: 1.把此jar...

    Java(通过ganymed-ssh2-build210.jar)实现SSH远程连接linux终端

    Java通过ganymed-ssh2-build210.jar库实现SSH远程连接Linux终端是一个常见的应用场景,主要用于自动化运维、系统管理或者开发过程中需要与Linux服务器交互的场景。ganymed-ssh2-build210.jar是Java的一个开源SSH库,...

    ganymed-ssh2-build251beta1.zip

    在java里可以通过Ganymed SSH-2, Expect4j等实现ssh登录,由于Ganymed SSH-2是纯java实现,并且可以实现scp,sftp等,因此我们采用Ganymed SSH-2

    ganymed-ssh2

    ganymed-ssh2 ,java支持ssh协议的jar包

Global site tag (gtag.js) - Google Analytics