java远程关机_通过jsch实现对linux服务器的shell客户端远程控制关机完整示例代码分享...
一、前言
由于前些阵子想找个ssh客户端 for android实现在手机上可以远程控制Centos服务器实现在手机上远程关机操作,找了一圈没有合适的,因此自己想通过linux的客户端接入包jsch实现绑定登录服务器,再进行关机操作的在线服务
二、代码示例
1. 命令接口类Command - 实现初始化账号、shell命令的执行及关闭session的简单操作public abstract interface Command{@b@@b@ public abstract void init(String paramString1, String paramString2, String paramString3, int paramInt1, int paramInt2);@b@@b@ public abstract boolean exec(String paramString, StringBuffer paramStringBuffer);@b@@b@ public abstract void close();@b@@b@}
2. 接口公共抽象类DefaultCommand - 实现默认及常规接口实现逻辑import com.jcraft.jsch.Channel;@b@import com.jcraft.jsch.ChannelExec;@b@import com.jcraft.jsch.JSch;@b@import com.jcraft.jsch.JSchException;@b@import com.jcraft.jsch.Session;@b@import com.jcraft.jsch.UserInfo;@b@import java.io.IOException;@b@import java.io.InputStream;@b@import org.apache.log4j.Logger;@b@@b@public abstract class DefaultCommand{@b@@b@ protected int port;@b@ private int connectionTimeOut;@b@ protected UserInfo userinfo;@b@ private JSch jsch;@b@ private Session session;@b@ private static final Logger log = Logger.getLogger(DefaultCommand.class);@b@@b@ public DefaultCommand()@b@ {@b@ this.port = 22;@b@ this.connectionTimeOut = 30000;@b@@b@ this.jsch = new JSch();@b@ }@b@@b@ public abstract void init(String paramString1, String paramString2, String paramString3, int paramInt1, int paramInt2);@b@@b@ protected void genrateSession(String host, String userName, int port, int connectionTimeOut, UserInfo userinfo) {@b@ try@b@ {@b@ this.session = this.jsch.getSession(userName, host, (port <= 0) ? this.port : port);@b@ this.session.setUserInfo(userinfo);@b@ if (connectionTimeOut <= 0) connect();@b@ else connect(connectionTimeOut);@b@ } catch (JSchException e) {@b@ log.error("get session error:" + e.getMessage());@b@ }@b@ }@b@@b@ private void connect() {@b@ connect(this.connectionTimeOut);@b@ }@b@@b@ private void connect(int connectionTimeOut) {@b@ if (this.session != null)@b@ try {@b@ this.session.connect(connectionTimeOut);@b@ } catch (JSchException e) {@b@ log.error("connection error:" + e.getMessage());@b@ }@b@ }@b@@b@ public boolean exec(String command, StringBuffer res){@b@ Channel channel = null;@b@ try {@b@ channel = this.session.openChannel("exec");@b@ ((ChannelExec)channel).setCommand(command);@b@ channel.setInputStream(null);@b@ ((ChannelExec)channel).setErrStream(System.err);@b@ InputStream is = channel.getInputStream();@b@ channel.connect();@b@ byte[] tmp = new byte[1024];@b@ int i=0;@b@ if (is.available() > 0) {@b@ i = is.read(tmp, 0, 1024);@b@ if (i
3. 默认账户类DefaultUserInfo - 账户密码等用户信息import com.jcraft.jsch.UIKeyboardInteractive;@b@import com.jcraft.jsch.UserInfo;@b@@b@public class DefaultUserInfo implements UserInfo, UIKeyboardInteractive {@b@@b@ private String userName;@b@ private String password;@b@@b@ public String getPassword()@b@ {@b@ return this.password;@b@ }@b@@b@ public void setPassword(String password) {@b@ this.password = password;@b@ }@b@@b@ public boolean promptPassword(String paramString) {@b@ return true;@b@ }@b@@b@ public boolean promptPassphrase(String paramString) {@b@ return true;@b@ }@b@@b@ public boolean promptYesNo(String paramString) {@b@ return true;@b@ }@b@@b@ public String getPassphrase() {@b@ return null;@b@ }@b@@b@ public void showMessage(String paramString)@b@ {@b@ }@b@@b@ public String[] promptKeyboardInteractive(String paramString1, String paramString2, String paramString3, String[] paramArrayOfString, boolean[] paramArrayOfBoolean)@b@ {@b@ return null;@b@ }@b@@b@ public String getUserName() {@b@ return this.userName;@b@ }@b@@b@ public void setUserName(String userName) {@b@ this.userName = userName;@b@ }@b@@b@}
4. linux命令实现类LinuxCommand - 继承DefaultCommand 并实现私有接口初始化public class LinuxCommand extends DefaultCommand implements Command {@b@@b@@Override@b@public void init(String host, String userName, String password, int port, int connectionTimeOut) {@b@this.userinfo = new DefaultUserInfo();@b@ ((DefaultUserInfo)this.userinfo).setPassword(password);@b@ ((DefaultUserInfo)this.userinfo).setUserName(userName);@b@ genrateSession(host, userName, port, connectionTimeOut, this.userinfo);@b@@b@}@b@@b@}
5. 测试用例类PowerOffTest - 通过main方法测试关闭指令public class PowerOffTest {@b@@b@public static void main(String[] args) {@b@LinuxCommand command=new LinuxCommand();@b@ command.init("192.168.1.222", "root", "123456", 22, 30000);@b@ command.exec("poweroff", new StringBuffer(""));@b@}@b@@b@}
java远程关机_通过jsch实现对linux服务器的shell客户端远程控制关机完整示例代码分享...相关推荐
- JAVA ftps设置_Java使用JSCH实现对FTPS服务器文件操作
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式.SF ...
- 用Python脚本实现对Linux服务器的监控
一.前言 二.概述 三.Python 版本说明 四./proc 文件系统 五.对CPU监测 六.对系统负载监测 七.对内存信息的获取 八.对网络接口的监测 九.监控apache服务器进程的Python ...
- 用 Python 脚本实现对 Linux 服务器的监控
版本说明 Linux 服务器是 Ubuntu 12.10 Python 版本 是 2.7 工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核, ...
- c 调用java post方法_.NET(C#) Fluent HTTP (Flurl Get和Post请求)使用方法及示例代码
1、命名空间using Flurl; using Flurl.Http; 2.使用Nuget安装引用Flurl.Http(Fluent HTTP) 1)使用Nuget界面管理器 2)使用Package ...
- linux 跟踪程序执行过程,用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪 用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪 1:功能介绍,使用本方法可以实现linux下C应用程 ...
- java连接linux服务器执行shell命令(框架分析+推荐)
java连接linux服务器执行shell命令(框架分析+推荐) 一.分类+连接方式 程序打成jar包,在本地服务器上执行shell命令.这种使用MyRuntimeUtil工具类 java程序远程li ...
- 远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转服务器源代码
远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转服务器源代码,socket多线程并发通讯,对接多路plc串口WIFI模块实现远程调试程序.支持各种串口服务器以及tcp以太网转发器硬件. 编 ...
- 远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转 服务器源代码,socket多线程并发通讯
远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转 服务器源代码,socket多线程并发通讯, 对接多路plc串口WIFI模块实现远程调试程序.支持各种串口服务器以及tcp以太网转发器硬件.
- 远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转服务器源代码,socket多线程并发通讯,对接多路plc串口WIFI模块实现远程调试程序
远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转服务器源代码,socket多线程并发通讯,对接多路plc串口WIFI模块实现远程调试程序. 支持各种串口服务器以及tcp以太网转发器硬件. ...
最新文章
- Linux10-归档、系统间复制文件
- [002] The Perks of Being a Wallflower - 读后记
- 一图解码数据中心数字化运维管理之道
- firewall-cmd命令管理防火墙
- 【转载保存】RunTime.getRunTime().addShutdownHook 添加钩子
- BJRangeSliderWithProgress
- 求最大公约数----辗转相除法
- 直播技术总结(二)ijkplayer的编译到Android平台并测试解码库
- matlab2012b安装教程
- 使用163邮箱+Python3.6 发送邮件/批量发送邮件
- 有序线性表查找平均长度 ASL 公式理解,Hash表的“查找成功的ASL”和“查找不成功的ASL”
- 东方计算机学校老师,衡水东方计算机中等专业学校举行校园开放日活动
- h5调用指纹识别_如何玩转指纹解锁H5插件?
- C. The Intriguing Obsession(组合数学)
- 中国科学院大学计算机学院夏令营,2019年中国科学院大学生数学夏令营招募通知...
- PostgreSQL函数——数值函数
- EXCEL表导入SQL,出现错误 0xc02020c5 的问题解决
- excel提示磁盘空间不足磁盘已满无法打开或保存
- mysql什么语句触发自动执行_MySQL的( )可在一定条件下被触发、自动执行一些语句序列。_学小易找答案...
- python实现缓存_Python实现缓存
热门文章
- oracle初始化化表空间用户权限
- jquery查找document节点
- 在 Windows 7 上安装消息队列
- .net core 3.1 mysql_.net core3.1 MVC使用sqlsugar方式操作mysql数据库
- 微课--搭建单机版PySpark开发环境(8分钟)
- Python+turtle绘制虚线同心圆
- Python+matplotlib绘图时显示中文的设置方法
- 微课|中学生可以这样学Python(2.3.4节):例2-1
- continue语句只用于循环语句中_Java之循环语句、条件判断语句(三目运算符)、break、continue...
- akcms在模板文件中书写{php},在模版中灵活处理变量的4种方法