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

现介绍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. 【主流技术】聊一聊消息队列 RocketMQ 的基本结构与概念

    目录 前言 一.初识 RocketMQ 1.1基本模型 二.基本概念 2.1Producer 2.2Consumer 2.3Topic 2.4Tag 2.5Message 2.6Broker 2.7P ...

  2. k8s学习总结之各组件功能及作用的详细介绍

    K8S集群架构: 一个K8S集群是由两大部分组成: Master节点和Node节点 一.Master节点主要包括API Server.Scheduler.Controller manager.etcd ...

  3. 量子算法抛转(以及Oracle函数初步)

    接下来要接触量子算法了,我们会看到怎么利用量子并行机制和干涉原理.干涉在算法对结果进行测量求值时举足轻重. Deutsch-Jozsa 算法 DJ算法是量子算法的入门算法,就像编程界的"He ...

  4. Java项目静态资源映射的几种方式

    一.Springboot 1.webjars方式 我们之前使用Maven构建一个Web项目时,在main目录下会存在一个webapp的目录,我们以前都是将所有的页面或静态资源导在这个目录下,但现在使用 ...

  5. 自动化车间3D可视化设计思路

    自动化车间3D可视化设计思路 随着国内制造业企业的高速发展,再加上政策支持,高效的生产模式和先进的管理方式越来越受到企业重视.更多的企业将工业信息化技术进行广泛的应用,比如MES系统.数字孪生以及生产 ...

  6. PHP中的__autoload()和spl_autoload_register()

    php的__autoload函数是一个魔术函数,在这个函数出现之前,如果一个php文件里引用了100个对象,那么这个文件就需要使用include或require引进100个类文件,这将导致该php文件 ...

  7. [oeasy]python0025_ 顺序执行过程_流水_流程_执行次序

    顺序执行过程_流水_流程_执行次序 回忆上次内容 上次 熟悉了 vim编辑器 操作 作用 w 向前移动光标一个word b 向后移动光标一个word :r oeasy.py 读取文件到当前文件缓存 g ...

  8. [oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

    ​ 查看进程 回忆上次内容 上次先进程查询 ps -elf 查看所有进程信息 ps -lf 查看本终端相关进程信息 杀死进程 kill -9 PID 给进程发送死亡信号 运行多个 python3 sh ...

  9. oeasy教您玩转vim - 87 - # 内容查找grep命令

    ​ 内容查找 grep 回忆 上次我们尝试了一下各种在vi中执行外部程序 可以排序 可以改大小写 还可以用管道 直接对于缓冲buffer文件进行操作 还是很方便的 其实还有一个外部命令很重要 根据内容 ...

  10. PointNet笔记

    可能遇到的问题 在windows上运行pointnet的代码时,可能会遇到一些问题: 1.比如提示OSError: no file with expected extension, 这是因为可视化的s ...