java jsch执行脚本_JSch远程执行脚本

article/2025/10/29 8:32:14

JSch远程执行脚本

2017-02-24

在自动化测试的时候,需要远程操控服务器做一些操作,比如切日、起服务器、执行某些脚本。如何实现?

我们可以利用JSch,远程执行脚本。JSch是Java Secure Channel的缩写,是一个SSH2功能的纯Java实现,具体信息可以参考JSch官网。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,同时你也可以集成它的功能到你自己的应用程序。在使用前,需要下载并导入JSch包:jsch-0.1.50.jar。

以下是实现代码通过JSch远程Windows系统和Linux系统执行脚本。其中Windows系统需要安装freeSSHd,具体步骤可查看终端模拟工具:Xshell 4。

1 pom.xml

com.jcraft

jsch

0.1.53

2 SshUtil.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importcom.jcraft.jsch.ChannelExec;importcom.jcraft.jsch.JSch;importcom.jcraft.jsch.JSchException;importcom.jcraft.jsch.Session;public classSshUtil {public static String exec(String host, String user, String psw, intport, String command) {

String result= "";

Session session= null;

ChannelExec openChannel= null;try{

JSch jsch= newJSch();//getSession()只是创建一个session,需要设置必要的认证信息之后,调用connect()才能建立连接。

session =jsch.getSession(user, host, port);

java.util.Properties config= newjava.util.Properties();

config.put("StrictHostKeyChecking", "no");

session.setConfig(config);

session.setPassword(psw);

session.connect();//调用openChannel(String type)//可以在session上打开指定类型的channel。该channel只是被初始化,使用前需要先调用connect()进行连接。//Channel的类型可以为如下类型://shell - ChannelShell//exec - ChannelExec//direct-tcpip - ChannelDirectTCPIP//sftp - ChannelSftp//subsystem - ChannelSubsystem//其中,ChannelShell和ChannelExec比较类似,都可以作为执行Shell脚本的Channel类型。它们有一个比较重要的区别:ChannelShell可以看作是执行一个交互式的Shell,而ChannelExec是执行一个Shell脚本。

openChannel = (ChannelExec) session.openChannel("exec");

openChannel.setCommand(command);int exitStatus =openChannel.getExitStatus();

System.out.println(exitStatus);

openChannel.connect();

InputStream in=openChannel.getInputStream();

BufferedReader reader= newBufferedReader(newInputStreamReader(in));

String buf= null;while ((buf = reader.readLine()) != null) {

result+= " " +buf;

}

}catch(JSchException e) {

result+=e.getMessage();

}catch(IOException e) {

result+=e.getMessage();

}finally{if (openChannel != null && !openChannel.isClosed()) {

openChannel.disconnect();

}if (session != null &&session.isConnected()) {

session.disconnect();

}

}returnresult;

}

}

View Code

3 Client.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;public classClient {public static voidmain(String[] args) {

ExecuteCmdOnWin();

}private static voidExecCmdOnLinux() {

String ip= "xxx.xxx.xxx.xxx";int port = 22;

String user= "username";

String pwd= "password";

String batCommand= "ls";try{

System.out.println("系统执行的CMD命令是:\"[" + batCommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, batCommand));

Thread.sleep(1000);

Thread.sleep(1000);

}catch(Exception e) {

System.out.println("切日操作失败,请查找原因");

}

}private static voidExecuteCmdOnWin() {

String ip= "xxx.xxx.xxx.xxx";int port = 22;

String user= "username";

String pwd= "password";

String batCommand= "cmd /c \"start " + "C:/createFolder.bat" + "\"";//运行批处理,会打开一个cmd窗口,这里会执行命令kill cmd.exe 进程

String killCMD = "cmd /c \"taskkill /f /fi \"IMAGENAME eq cmd.exe\"\"";

String updatedatecommand= "cmd /c \"date " + "2017/2/24";

String dirCommand= "cmd /c dir";try{

System.out.println("系统执行的CMD命令是:\"[" + batCommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, batCommand));

System.out.println("系统执行的CMD命令是:\"[" + killCMD + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, killCMD));

System.out.println("系统执行的CMD命令是:\"[" + updatedatecommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port,updatedatecommand));

System.out.println("系统执行的CMD命令是:\"[" + dirCommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, dirCommand));

}catch(Exception e) {

System.out.println("切日操作失败,请查找原因");

}

}

}

View Code

4 结果

4.1 Window

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

系统执行的CMD命令是:"[cmd /c "start C:/createFolder.bat"]"

-1

系统执行的CMD命令是:"[cmd /c "taskkill /f /fi "IMAGENAME eq cmd.exe""]"

-1

�ɹ�: ����ֹ PID Ϊ 3444 �Ľ��̡� �ɹ�: ����ֹ PID Ϊ 2860 �Ľ��̡� �ɹ�: ����ֹ PID Ϊ 2980 �Ľ��̡�

系统执行的CMD命令是:"[cmd /c "date 2017/2/24]"

-1

系统执行的CMD命令是:"[cmd /c dir]"

-1

������ C �еľ�û�б�ǩ�� ������к��� 3C69-84C5 C:\Users\Administrator\Desktop ��Ŀ¼ 2017/02/22 16:28

View Code

4.2 Linux

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

系统执行的CMD命令是:"[ls]"

-1

tmpfolder 公共的 模板 视频 图片 文档 下载 音乐 桌面

View Code

5 参考


http://chatgpt.dhexx.cn/article/unyloMjT.shtml

相关文章

JSch基本使用

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 欢迎跳转到本文的原文链接:https://honeypps.com/java/jsch-quick-start/ JSch 是SSH2的一个纯Ja…

基于 JSch 实现服务的自定义监控解决方案

一、基于 JSch 实现服务的自定义监控 JSch 是 SSH2 的一个纯 Java 实现。它允许你连接到一个 sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。 既然可以通过 SSH 连接到服务器,那就可…

java jsch_java - 使用JSch在远程计算机上执行命令

SSH是访问远程计算机,传输数据和执行远程命令的一种简单而安全的方法。除了基础的交互模式外,还有许多依赖于ssh Client/Server架构的工具可以实现自动化执行远程任务。我们可以找到ssh客户端的许多实现,但是如何从代码编程访问ssh提供的功能呢?本文介绍JAVA语言中使用ssh功…

使用JSCH连接Linux系统并执行命令

一、关于JSCH技术的简单描述 JSCH是SSH的一个纯Java实现。说直白点,就是一个远程连接你其他Linux或者Unix服务器的一个java代码包。其实就是我们使用jsch这个jar包来方便我们编写代码来连接自己linux系统的。 SSH:是目前较可靠,专为远程登录…

【实用技巧篇】JSch使用介绍,实用JSch实现文件传输

文章目录 JSch使用介绍1. jar包下载2. 引入依赖3. 代码实现4. 验证 JSch使用介绍 JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的程序中。 1. jar包下载…

Jsch网络工具包的使用及源码简析

一、背景 最近,导师安排了些看论文文献并整理论文至文件服务器的工作,在实验的过程中,我们知道常见的上传文件至服务器有以下方式。 ftp/sftp协议进行上传ssh连接,并通过scp命令进行上传通过xftp、xshell、ftplina等图形化工具上…

JSch学习笔记

JSch笔记 第 1 章 JSch简介 1.1 简述 1)jsch是ssh2的一个纯Java实现。它允许你连接到一个sshd服务器,使用端口转发、X11转发、文件传输等。 2)SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 3)…

OrmLite For Android 学习笔记 之一 Ormlite 介绍及使用

Android 自带的数据库是SQLite,这种数据库适合用于于小型设备中。在实际使用数据库的应用中,我们经常需要把数据库记录转换为 业务对象实体。在桌面应用或者web应用中我们有很多成熟的ORM工具。Android本身没有提供这么一种工具。 Ormlite 是一种ORM工具…

OrmLite 数据库使用大全

本文介绍OrmLite的数据库表的使用以及在项目中选择他的原因。 1. 选用 OrmLite 数据库的原因 目前用的最多的就是GreenDAO 和 OrmLite 了,两者各有优缺点。 GreenDAO 性能高,号称Android最快的关系型数据库;内存占用较小;支持数…

Android ORM数据库之OrmLite使用框架及源码分析

一、简介 OrmLite是一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机率。  首先可以去它的官网看看www.ormlite.com,它的英文全称是Object Relational Mapping&am…

ORMLite完全解析(一)通过实例理解使用流程

在android中使用原始的SQLiteOpenHelper操作数据库显得过于繁琐,而且对于不是很熟悉数据库操作的人来说比较容易出现一些隐藏的漏洞。所以一般都会想到使用相关的ORMLite框架完成开发,类似于J2EE开发中的Hibernate和Mybatis等等,在提高开发效…

Android数据库ORMlite框架

前言 由于第二章是整个文档的核心,内容也很多,所以分次翻译。下一章的内容会继续本章接着翻译。 ------------------------------------------------------------------------------------- 2 如何使用 这一章进入到更多详细地使用ORMLite的各种功能。 2…

Ormlite 介绍 一

概述 ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。 官方网站:http://ormlite.com/ 如果需要开发android,只需要下载core和android两个jar包: ORMlite的使用 1,建立映射关系 Ormlite与数据库…

ormlite介绍一

概述 ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。 官方网站:http://ormlite.com/ 如果需要开发android,只需要下载core和android两个jar包&#xff…

Lite-Orm数据库

1. 初步认识 GItHub库 自动化且比系统自带数据库操作快1倍! LiteOrm是android上的一款数据库(ORM)框架库。速度快、体积小、性能高。开发者基本一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。 2.导入orm相…

Android 数据库框架ormlite 使用精要

Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机率。 ormlite是什么? 首…

ormlite 的简单应用

在android开发中还有哪些技术可以方便的操作数据库,我不大清楚,今天学习了一下 ormlite,觉得还不错,非常方便。 ormlite官网下载:http://ormlite.com/releases/ 1、引入jar包 2、写实体类 package com.example.aandr…

OrmLite for android--Ormlite的大概介绍

Ormlite 是一种ORM工具,并且是一种轻量级别的工具。我们可以使用它来对Android中内嵌的sqlite数据库进行相关的操作。Android 的应用程序应使用 Ormlite for android 版本来进行相关的开发。Ormlite for android 提供两个jar库:ormlite-android-4.22.j…

Ormlite 介绍 一

概述 ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。 官方网站:http://ormlite.com/ 如果需要开发android,只需要下载core和android两个jar包&#xff…

Ormlite基本使用

首先需要导入ORMLite的依赖:在build.gradle中加入以下代码: implementation com.j256.ormlite:ormlite-android:5.1implementation com.j256.ormlite:ormlite-core:5.1建立Bean类(以OneTableBean为例) import com.j256.ormlite.f…