需要做一个监控远程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(),这个并不表示已经用了多少,而是磁盘可用空间。通常情况下,这个值和剩余容量是相等的。
相关推荐
ssh工具 用于连接远程服务器 linux 系统 解压 安装即可使用
Linux远程连接工具类SSH是一种广泛使用的通信协议,它允许用户在本地计算机上安全地操作远程Linux系统。SSH,全称为Secure Shell,旨在提供加密的网络服务,特别适用于管理服务器、执行命令、传输文件等场景。在开发...
- **Java SSH 安全访问代码**:该标题表明了这段代码主要实现了通过 Java 进行 SSH 安全访问的功能。 #### 描述解读: - **Java SSH 安全访问代码**:这部分代码提供了 Java 实现 SSH 访问的基础结构。 - **里面有...
Ganymed SSH2 是一个开源的Java库,它支持SSH2协议,可以用于实现安全地远程访问Linux服务器或其他SSH服务器。通过该库,开发者可以方便地在Java应用程序中集成SSH和SCP功能。具体来说,它可以用来: 1. **远程登录...
java远程访问linux服务器操作 远程执行shll脚本或者命令、上传下载文件 package com.szkingdom.kfit.bank.ccbDirectShortcut.helper; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.SCPClient; import ...
在Java编程环境中,有时我们需要在Windows系统中远程访问Linux服务器以获取或操作文件。`JSch`库提供了一个这样的解决方案,它是一个纯Java实现的SSH2库,允许开发者连接到远程计算机并执行命令,传输文件等。本篇将...
总的来说,这个“远程shell调用”工具结合了Java SSH2库和Tomcat相关组件,为开发者提供了一种简单、便捷的方式来通过SSH连接远程Linux服务器并执行Shell脚本。对于需要跨服务器操作或自动化运维的场景,这样的工具...
此外,还需要关注用户权限,确保程序有权限访问远程和本地的文件系统。 6. **异步和多线程**: 如果需要同时处理多个远程拷贝任务,可以利用Java的并发特性,如`ExecutorService`和`Future`,来实现多线程或者异步...
ssh 和scp 是 Linux 系统中常用的远程登陆和文件传输工具,但是使用它们需要输入密码,这就带来了不便。为了解决这个问题,文章介绍了一种使用 ssh 和 scp 不需要密码的方法。 密钥对的生成 密钥对是公钥和私钥的...
PuTTY的主要功能是提供一个终端模拟器,让用户能够通过命令行与远程Linux系统交互。以下是PuTTY的一些关键特性: 1. 安全性:PuTTY使用加密的SSH协议,确保数据传输过程中的安全性。 2. 用户友好:安装简单,配置...
总的来说,SSH是一个强大的工具,不仅提供了安全的远程访问,还能进行各种安全的数据交换。这个绿色版SSH客户端简化了部署流程,让用户能够快速地在不同系统间进行安全的远程操作。无论你是系统管理员、开发者还是...
SSH2(Secure Shell v2)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在本文中,我们将深入探讨SSH2的工作流程,以帮助新手理解其核心概念和操作步骤。 首先,SSH2流程的核心是建立一个...
- 考虑使用SSH密钥对认证,以增强远程访问的安全性。 6. **自动化管理** - 在企业环境中,可能需要批量修改多个用户的密码,这时可以通过Java脚本读取用户列表,然后逐个执行密码修改操作。 - 使用Ansible、Chef...
SSH权限分配是指在使用SSH进行远程操作时,如何管理和控制用户对服务器资源的访问权限。在这个主题中,我们将深入探讨Java SSH权限解析及其相关源代码。 首先,理解SSH权限分配的基础是了解SSH架构。SSH通常由...
首先,Java程序需要识别运行的操作系统类型,因为不同的操作系统(如Windows和Linux)提供了不同的API或系统调用来访问CPU占用信息。在提供的代码示例中,`System.getProperty("os.name")`用于获取操作系统名称,...
3. 安全组策略:确保安全组配置允许SSH访问,以便远程连接ECS实例。 4. 系统优化:根据实际需求调整Java的JVM参数,提高性能和资源利用率。 四、部署Spring Boot应用 1. 编译Spring Boot项目:在本地开发环境中...
3. **Shell脚本执行**:在SSH连接建立后,Java程序可以通过执行`exec`命令来运行远程服务器上的Shell脚本。脚本可以包含任意的Linux或Unix命令,甚至复杂的流程控制语句。 4. **输入/输出流处理**:为了获取Shell...
Java RDP库通常用于实现Windows系统的远程桌面连接,它模拟了微软的RDP协议,让用户能够通过Java程序访问远程Windows桌面。而SSH协议则常用于Linux和Unix系统,它提供安全的网络连接,支持命令行交互以及文件传输。 ...
通过使用SSH,用户可以远程控制服务器、传输文件、执行命令等操作,并且所有通信都经过加密处理,保证了数据的安全性。下面将详细介绍SSH的基本概念、使用方法以及与Java框架SSH(Struts + Hibernate + Spring)的...
总结来说,"基于Java的Linux远程登录系统研究与实现"项目涉及到了Java编程、SSH协议、用户认证、网络通信安全等多个重要知识点。通过学习和实践这一系统,开发者不仅能深入理解Java的网络编程,还能掌握构建安全远程...