远程采集服务器信息,比如说磁盘信息、内存信息。

现介绍java通过SSH执行命令采集服务器信息,比如说执行df、ls、top。

/**
*
* SSH远程执行shell类
*/
public class SSHSession implements IRemoteSession { /** SSH连接 */
private Connection conn; private NodeInfoVO nodeInfoVO; private InputStream stdOut = null; private String charset = Charset.defaultCharset().toString(); private static final int TIME_OUT = 1000 * 5 * 60; private static final Logger LOGGER = Logger.getLogger(SSHSession.class); /**
* 构造函数
*
* @param nodeInfoVO
*/
public SSHSession(NodeInfoVO nodeInfoVO) {
this.nodeInfoVO = nodeInfoVO;
} /**
* 登录
*
* @return
* @throws IOException
*/
private boolean login() throws IOException {
conn = new Connection(nodeInfoVO.getServerIp());
conn.connect();
return conn.authenticateWithPassword(nodeInfoVO.getServerUserName(), nodeInfoVO.getServerPassword());
} /**
* 执行脚本
*
* @param cmds
* @return
* @throws Exception
*/
public String execCommand(String cmds) { String outStr = "";
try {
if (login()) {
// Open a new {@link Session} on this connection
Session session = conn.openSession();
// Execute a command on the remote machine.
session.execCommand(cmds); stdOut = new StreamGobbler(session.getStdout());
outStr = processStream(stdOut, charset); session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT); } else {
LOGGER.error("登录远程机器失败"); // 自定义异常类 实现略
}
} catch (Exception e) {
return outStr;
} finally {
close();
}
return outStr;
} /**
* @param in
* @param charset
* @return
* @throws IOException
* @throws UnsupportedEncodingException
*/
private String processStream(InputStream in, String charset) throws Exception {
byte[] buf = new byte[1024];
StringBuilder sb = new StringBuilder();
while (in.read(buf) != -1) {
sb.append(new String(buf, charset));
}
return sb.toString();
} public static void main(String args[]) throws Exception {
SSHSession exe = new SSHSession(new ServerBean("10.10.5.219", 22, "root", "tt"));
System.out.println(exe.execCommand("ls "));
} /**
* @return 获取 serverBean属性值
*/
public NodeInfoVO getNodeInfoVO() {
return nodeInfoVO;
} /**
*
* @see com.comtop.numen.monitor.collection.appservice.device.remote.IRemoteSession#close()
*/
@Override
public void close() {
if (conn != null) {
conn.close();
}
IOUtils.closeQuietly(stdOut);
}

远程采集服务器指标信息(一) 远程通过SSH执行命令的更多相关文章

  1. Pycharm远程连接服务器(windows下远程修改服务器代码)

    1.写在前面     之前一致用putty,ssh,修改代码,或者本地修改,上传到服务器,各种不爽,现在改用xshell,但是有时候还是不方便感觉,于是自己配置了远程连接pycharm,这样不用总是到 ...

  2. 模拟远程SSH执行命令的编解码说明

    模拟一个SSH“远程”执行命令并获取命令结果的一个程序: 1.在C/S架构下,当客户端与服务器建立连接(这里以TCP为例)后,二者可以不断的进行数据交互.SSH远程可以实现的效果是客户端输入命令可以在 ...

  3. Linux远程ssh执行命令expect使用及几种方法

    expect命令实现脚本免交互 一.Linux下SSH无密码认证远程执行命令 在客户端使用ssh-keygen生成密钥对,然后把公钥复制到服务端(authorized_keys). 实现步骤: 1.客 ...

  4. 远程ssh执行命令时提示找不到命令

    最开始的时候碰到这种问题,是在hadoop003上配置了jdk1.8, 在hadoop002上执行ssh hadoop003 java -version提示没有命令,先ssh hadoop003然后执 ...

  5. 远程 RADIUS 服务器组

    远程 RADIUS 服务器组 远程 RADIUS 服务器组是包含一个或多个 RADIUS 服务器的已命名的组.IAS 用作 RADIUS 请求消息的 RADIUS 代理时,必须指定远程 RADIUS ...

  6. IDEA远程调试服务器代码

    先在idea添加一个remote,host填服务器ip,port填监听服务器端口,默认5005 然后在服务器tomcat catalina.sh 添加(红色部分): JAVA_OPTS="$ ...

  7. 通过ssh实现远程登陆服务器!

    通过ssh实现远程登陆前提是服务器已经开启ssh服务,至于怎么开启,可以参看上一篇“Linux服务器开启ssh服务,实现ssh远程登陆!”! 使用ssh登陆时,输入主机(linux的ip地址),账号, ...

  8. Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)

    本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...

  9. paramiko模块(远程操作服务器)

    paramiko模块(远程操作服务器) django+paramkio实现远程某些服务器执行命令+上传文件 用于帮助开发者通过代码远程连接服务器,并对服务器进行操作. pip3 install par ...

  10. python-ssh-远程服务器+远程docker执行命令

    在python语言中实现远程服务器执行命令+远程dcoker执行命令 def ssh_exec_command(ip, username, password, cmd=None): "&qu ...

随机推荐

  1. js-文件读写和上传下载的简单例子01

    现下,网络越来越快,浏览器的功能和性能越来越好,所以很多时候,已经不需要一些复杂的框架来实现不是非常复杂的功能. 我们只有在以下情况才会考虑使用框架或者现成的第三方组件: 1.功能复杂,自己写没有必要 ...

  2. shell 编程简记

    1. 环境变量 环境变量是指操作系统中记录一些配置信息的变量,这些变量在不同的程序之间共享,可以被操作系统或者 shell 脚本读取和修改. 环境变量也可以类比为各个语言中的全局变量,其作用域是全局的 ...

  3. Lfu缓存在Rust中的实现及源码解析

    一个 lfu(least frequently used/最不经常使用页置换算法 ) 缓存的实现,其核心思想是淘汰一段时间内被访问次数最少的数据项.与LRU(最近最少使用)算法不同,LFU更侧重于数据 ...

  4. python基础-内置函数

    # callable() # 函数用于检查一个对象是否是可调用的.如果返回 True,object 仍然可能调用失败:但如果返回 False,调用对象 object 绝对不会成功. # 对于函数.方法 ...

  5. C#的多线程UI窗体控件显示方案 - 开源研究系列文章

    上次编写了<LUAgent服务器端工具>这个应用,然后里面需要新启动一个线程去对文件进行上传到FTP服务器,但是新线程里无法对应用主线程UI的内容进行更改,所以就需要在线程里设置主UI线程 ...

  6. Spark3学习【基于Java】1. Spark-Sql入门程序

    spark-sql是用来处理结构化数据的模块,是入门spark的首要模块. 技术的学习无非就是去了解它的API,但是Spark有点难,因为它的例子和网上能搜到的基本都是Scala写的.我们这里使用Ja ...

  7. .NET 按格式导出txt

    效果图 后台代码 private void DownTxt() { try { StringBuilder sb = new StringBuilder(); for (int i = 0; i &l ...

  8. mybatis-plus的insert方法出现-id' doesn't have a default value问题

    出现这个问题,只需把对应的字段注解设置为,例如: @TableId(value = "id",type = IdType.INPUT) private String id; 即可解 ...

  9. Sql Server 按日统计产量

    碰到一个这样的需求,需要查询每天的产量,直接 group 是可以分出不同天的产量,但是如果当天没有生产,就会少一条那一天的记录,而不是那一天显示产量为0,这样不方便前端显示曲线. 于是找到下面的办法, ...

  10. 基于EF Core存储的Serilog持久化服务

    前言 Serilog是 .NET 上的一个原生结构化高性能日志库,这个库能实现一些比内置库更高度的定制.日志持久化是其中一个非常重要的功能,生产环境通常很难挂接调试器或者某些bug的触发条件很奇怪.为 ...