Java中通过jsch来连接远程服务器执行linux命令
作者:孙琛斌 发布时间:2023-02-02 22:21:52
标签:jsch,执行,命令
有时候你可能需要通过代码来控制执行linux命令实现某些功能。
针对这类问题可以使用JSCH来实现,具体代码如下:
public class CogradientImgFileManager{
private static final Logger log = LoggerFactory.getLogger(CogradientImgFileManager.class);
private static ChannelExec channelExec;
private static Session session = null;
private static int timeout = 60000;
// 测试代码
public static void main(String[] args){
try{
versouSshUtil("10.8.12.189","jmuser","root1234",22);
runCmd("java -version","UTF-8");
}catch (Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 连接远程服务器
* @param host ip地址
* @param userName 登录名
* @param password 密码
* @param port 端口
* @throws Exception
*/
public static void versouSshUtil(String host,String userName,String password,int port) throws Exception{
log.info("尝试连接到....host:" + host + ",username:" + userName + ",password:" + password + ",port:"
+ port);
JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(userName, host, port); // 根据用户名,主机ip,端口获取一个Session对象
session.setPassword(password); // 设置密码
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接
}
/**
* 在远程服务器上执行命令
* @param cmd 要执行的命令字符串
* @param charset 编码
* @throws Exception
*/
public static void runCmd(String cmd,String charset) throws Exception{
channelExec = (ChannelExec) session.openChannel("exec");
channelExec.setCommand(cmd);
channelExec.setInputStream(null);
channelExec.setErrStream(System.err);
channelExec.connect();
InputStream in = channelExec.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.forName(charset)));
String buf = null;
while ((buf = reader.readLine()) != null){
System.out.println(buf);
}
reader.close();
channelExec.disconnect();
}
}


猜你喜欢
- 本文实例讲述了Android编程中activity启动时出现白屏、黑屏问题的解决方法。分享给大家供大家参考,具体如下:默认情况下 activ
- Android Bitmap详解及Bitmap的内存优化一、Bitmap:Bitmap是Android系统中的图像处理的最重要类之一。用它可
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 一、抽象类是什么?在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的
- 一 引入项目有个新需求,当点击或触碰TextBox时,基于TextBox的相对位置,弹出一个自定义的Keyboard,如下图所示:二 Key
- 文章描述在前一篇写了如何将一张GIF动态图分解成一帧一帧的图片,这一篇我们就把喝进去的一瓢水给还回去。即把一张又一张的图片去拼合成一张GIF
- 手头项目需要抓取一个用js渲染出来的网站中的数据。使用常用的httpclient抓回来的页面是没有数据。上网百度了一下,大家推荐的方案是使用
- 前言在公司的图书馆项目中曾经用过截取字符串的方法,项目是java语言的;最近在公司的另一个项目中又需要截取字符串,一种环境是C#语言,一种环
- 扩展Hibernate注解@CreationTimestamp,@UpdateTimestamp支持Java8新的时间类型Hibernate
- 本文介绍Android平台进行数据存储的五大方式,分别如下:1 使用SharedPreferences存储数据2 文件存储数据 &
- 要求:1、输入手机号,点击发送后随机生成6位数字码,2分钟有效2、输入验证码,点击验证,返回成功或失败3、每个手机号每天只能输入3次代码如下
- 前言: 最近一直在看Launcher模块,经过差不多两个月学习,终于摸透了Launcher的一些主要功能实现,目前继续还处于摸索状态。未看L
- 什么是jdkjdk是什么呢?jdk的是java development kit的缩写,意思是java程序开发的工具包。也可以说jdk是jav
- 本文实例讲述了Android数据持久化之File机制。分享给大家供大家参考,具体如下:在使用Java SE平台开发C/S结构的软件中,Fil
- 引言java 7提供了另外一个很有用的线程池框架,Fork/Join框架理论Fork/Join框架主要有以下两个类组成. * ForkJoi
- 前言最近在改进项目的并发功能,但开发起来磕磕碰碰的。看了好多资料,总算加深了认识。于是打算配合查看源代码,总结并发编程的原理。准备从用得最多
- QTableWidget 是 Qt 中的表格组件类。在窗体上放置一个 QTableWidget 组件后,可以在 Property Edito
- StringBuilder在高性能场景下的正确用法关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuild
- struct OutputFilestruct OutputFile 是单个输出文件的管理器。之前在 parse_opt
- 如何建立哈夫曼树的,网上搜索一堆,这里就不写了,直接给代码。1.哈夫曼树结点类:HuffmanNode.h#ifndef HuffmanNo