`
somefuture
  • 浏览: 1090004 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过java使用ssh访问远程Linux

 
阅读更多

需要做一个监控远程Linux磁盘空间的东西,绞尽脑汁终于发现一个东西。ch.ethz.ssh2。

它可以通过用户名和密码登录可以ssh登录的机器,并且可以执行命令,并将命令显示的东西返回来。

上代码了:

Connection con = null;
			Session session = null;
			BufferedReader dr = null;
			try {
				String ipd = mc.getIpAddress();
				if(ipd.equals("127.0.0.1")){
					con = new Connection(mc.getIpAddress(),2222);
				}else{
					con = new Connection(mc.getIpAddress());
				}
				ConnectionInfo info = con.connect();
				boolean result = con.authenticateWithPassword(mc.getUserName(), mc.getPassword());
				session = con.openSession();
				session.execCommand("df -T");
				InputStream stdout = session.getStdout();
				stdout = new StreamGobbler(session.getStdout());
				dr = new BufferedReader(new InputStreamReader(stdout));
				String line;
				while ((line=dr.readLine()) != null) {
					System.out.println(line);
					if(line.startsWith("/dev/")){
						Pattern p = Pattern.compile("[\\s]+");
						String[] arrs = p.split(line);
						for (String s : arrs) {
							System.out.println(s);
						}
						if(!arrs[1].startsWith("iso")){
							if(Long.parseLong(arrs[4])<5L*1024*1024 || Double.parseDouble(arrs[5])>0.9d){
								doAfterThing(mc, arrs[0]);
							}
						}
					}
				}
			} catch (Exception e) {
				System.err.println(e.getMessage());
			} finally {
				try {
					dr.close();
					session.close();
					con.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

 要注意的地方有两点:

1.

Connection con = new Connection(String ip);

 接收一个远程地址做参数,默认端口是22。如果不是这个端口,需要指定。比如我用的虚拟机,使用了端口转发,所以写成

Connection con = new Connection(mc.getIpAddress(),2222);

 因为的端口是2222.

2.session.getStdout() 的返回值是一个InputStream,但是需要包装后才能用。

刚开始我写成了

InputStream stdout = session.getStdout();
dr = new BufferedReader(new InputStreamReader(stdout));

 怎么也娶不到东西。

后来写为

InputStream stdout  = new StreamGobbler(session.getStdout());

 才好了。StreamGobbler是ch.ethz.ssh2自己的一个类,文档如下:

/**
 * A <code>StreamGobbler</code> is an InputStream that uses an internal worker
 * thread to constantly consume input from another InputStream. It uses a buffer
 * to store the consumed data. The buffer size is automatically adjusted, if needed.
*/

 

 =========================================另外补充一点Java查看本地磁盘信息的方法:

这也是在查找过程中找到的。

 

File[] roots = File.listRoots();
System.err.println("the count of roots is : "+roots.length);
double constm = 1024 * 1024 * 1024 ;
        double total = 0d;
        for (File _file : roots) {
            System.out.println(_file.getPath());
            double total0 = _file.getTotalSpace()/constm,free0=_file.getFreeSpace()/constm,used0=total0-free0;
            System.out.println("totol space = " + total0+" G");
            System.out.print("the free space = " + free0+" G");
            System.out.println("---------- "+free0*100/total0+"% ----------");
            System.out.print("the used space = " + used0+" G");
            System.out.println("---------- "+used0*100/total0+"% ----------");
            System.out.println();
            total+=_file.getTotalSpace();
        }
        System.out.println("the total space of the machine = "+doubleFormat(total/constm));

 代码很简单,不过有一点要注意:getTotalSpace()获得的是这个盘的总容量,getFreeSpace()获得的是剩余容量,还有个方法是getUsableSpace(),这个并不表示已经用了多少,而是磁盘可用空间。通常情况下,这个值和剩余容量是相等的。

 

1
1
分享到:
评论

相关推荐

    ssh 远程连接Linux工具

    ssh工具 用于连接远程服务器 linux 系统 解压 安装即可使用

    7.linux远程连接工具类 SSH

    Linux远程连接工具类SSH是一种广泛使用的通信协议,它允许用户在本地计算机上安全地操作远程Linux系统。SSH,全称为Secure Shell,旨在提供加密的网络服务,特别适用于管理服务器、执行命令、传输文件等场景。在开发...

    java ssh 安全访问代码

    - **Java SSH 安全访问代码**:该标题表明了这段代码主要实现了通过 Java 进行 SSH 安全访问的功能。 #### 描述解读: - **Java SSH 安全访问代码**:这部分代码提供了 Java 实现 SSH 访问的基础结构。 - **里面有...

    java应用程序远程登录linux并执行其命令

    Ganymed SSH2 是一个开源的Java库,它支持SSH2协议,可以用于实现安全地远程访问Linux服务器或其他SSH服务器。通过该库,开发者可以方便地在Java应用程序中集成SSH和SCP功能。具体来说,它可以用来: 1. **远程登录...

    ganymed-ssh2-build210.jar java远程访问linux服务器操作、上传下载文件

    java远程访问linux服务器操作 远程执行shll脚本或者命令、上传下载文件 package com.szkingdom.kfit.bank.ccbDirectShortcut.helper; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.SCPClient; import ...

    java代码在window获取linux文件

    在Java编程环境中,有时我们需要在Windows系统中远程访问Linux服务器以获取或操作文件。`JSch`库提供了一个这样的解决方案,它是一个纯Java实现的SSH2库,允许开发者连接到远程计算机并执行命令,传输文件等。本篇将...

    远程shell调用.rar

    总的来说,这个“远程shell调用”工具结合了Java SSH2库和Tomcat相关组件,为开发者提供了一种简单、便捷的方式来通过SSH连接远程Linux服务器并执行Shell脚本。对于需要跨服务器操作或自动化运维的场景,这样的工具...

    Java实现Linux的远程拷贝

    此外,还需要关注用户权限,确保程序有权限访问远程和本地的文件系统。 6. **异步和多线程**: 如果需要同时处理多个远程拷贝任务,可以利用Java的并发特性,如`ExecutorService`和`Future`,来实现多线程或者异步...

    使用ssh、scp不需要密码

    ssh 和scp 是 Linux 系统中常用的远程登陆和文件传输工具,但是使用它们需要输入密码,这就带来了不便。为了解决这个问题,文章介绍了一种使用 ssh 和 scp 不需要密码的方法。 密钥对的生成 密钥对是公钥和私钥的...

    linux远程访问工具

    PuTTY的主要功能是提供一个终端模拟器,让用户能够通过命令行与远程Linux系统交互。以下是PuTTY的一些关键特性: 1. 安全性:PuTTY使用加密的SSH协议,确保数据传输过程中的安全性。 2. 用户友好:安装简单,配置...

    远程连接工具ssh

    总的来说,SSH是一个强大的工具,不仅提供了安全的远程访问,还能进行各种安全的数据交换。这个绿色版SSH客户端简化了部署流程,让用户能够快速地在不同系统间进行安全的远程操作。无论你是系统管理员、开发者还是...

    SSH2流程图

    SSH2(Secure Shell v2)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在本文中,我们将深入探讨SSH2的工作流程,以帮助新手理解其核心概念和操作步骤。 首先,SSH2流程的核心是建立一个...

    java修改linux密码资料

    - 考虑使用SSH密钥对认证,以增强远程访问的安全性。 6. **自动化管理** - 在企业环境中,可能需要批量修改多个用户的密码,这时可以通过Java脚本读取用户列表,然后逐个执行密码修改操作。 - 使用Ansible、Chef...

    java ssh权限解析以及源代码

    SSH权限分配是指在使用SSH进行远程操作时,如何管理和控制用户对服务器资源的访问权限。在这个主题中,我们将深入探讨Java SSH权限解析及其相关源代码。 首先,理解SSH权限分配的基础是了解SSH架构。SSH通常由...

    用java获取CPU占用率

    首先,Java程序需要识别运行的操作系统类型,因为不同的操作系统(如Windows和Linux)提供了不同的API或系统调用来访问CPU占用信息。在提供的代码示例中,`System.getProperty("os.name")`用于获取操作系统名称,...

    linux和阿里云下安装JAVA1.8

    3. 安全组策略:确保安全组配置允许SSH访问,以便远程连接ECS实例。 4. 系统优化:根据实际需求调整Java的JVM参数,提高性能和资源利用率。 四、部署Spring Boot应用 1. 编译Spring Boot项目:在本地开发环境中...

    java 远程调用Shell脚本客户端包

    3. **Shell脚本执行**:在SSH连接建立后,Java程序可以通过执行`exec`命令来运行远程服务器上的Shell脚本。脚本可以包含任意的Linux或Unix命令,甚至复杂的流程控制语句。 4. **输入/输出流处理**:为了获取Shell...

    java 远程桌面

    Java RDP库通常用于实现Windows系统的远程桌面连接,它模拟了微软的RDP协议,让用户能够通过Java程序访问远程Windows桌面。而SSH协议则常用于Linux和Unix系统,它提供安全的网络连接,支持命令行交互以及文件传输。 ...

    ssh介绍及使用方法

    通过使用SSH,用户可以远程控制服务器、传输文件、执行命令等操作,并且所有通信都经过加密处理,保证了数据的安全性。下面将详细介绍SSH的基本概念、使用方法以及与Java框架SSH(Struts + Hibernate + Spring)的...

    基于Java的Linux远程登录系统研究与实现.zip

    总结来说,"基于Java的Linux远程登录系统研究与实现"项目涉及到了Java编程、SSH协议、用户认证、网络通信安全等多个重要知识点。通过学习和实践这一系统,开发者不仅能深入理解Java的网络编程,还能掌握构建安全远程...

Global site tag (gtag.js) - Google Analytics