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

article/2025/10/29 8:39:36

一、关于JSCH技术的简单描述

JSCH是SSH的一个纯Java实现。说直白点,就是一个远程连接你其他Linux或者Unix服务器的一个java代码包。其实就是我们使用jsch这个jar包来方便我们编写代码来连接自己linux系统的。
SSH:是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
二、使用JSCH的基本操作步骤
1.首先当然是基于Eclipse或者Intellij IDEA。安装教程数不胜数,在这里略过。
2.下载jsch的jar包并导入自己的项目目录中。
在https://mvnrepository.com/这个地址先下载jsch的jar包。
在这里插入图片描述
搜索jsch,找到一个合适的版本(就是使用人数比较多的版本,稳定)
在这里插入图片描述
点进去,再找到一个人数使用比较多的版本点击下载
在这里插入图片描述
下载
在这里插入图片描述
OK,下载完jar包之后在项目下新建一个folder文件夹,命名为lib(web项目在WEB-INF目录自带)。将jsch的jar包copy到lib目录下,后右键点击你的jar包,选择Build Path----->Add To Build Path。这样,jar包就已经导入你的项目中可以使用了。
3.编写jschutil工具类,用于连接Linux系统
代码如下:

/*** java 使用jsch远程链接linux 执行命令* @author Weikisa*/
public class JSchUtil {private static JSch jsch;//定义jsch连接类private static Session session;private static String user = "root";//Linux系统的用户名private static String password = "R00tAtCT";//密码private static String host = "10.129.93.85";//測試IP,實際使用以輸入IP地址為准/*** 首先连接服务器* @throws JSchException*/public static void connect(String hostIP) throws JSchException {jsch = new JSch();//将jsch实例化session = jsch.getSession(user, hostIP, 22);//默认端口号为22端口,使用用户名user连接IPsession.setPassword(password);//设置登录密码session.setConfig("StrictHostKeyChecking", "no");//是否使用密钥登录,一般默认为nosession.connect(60 * 1000);}/***連接測試*/public static boolean connectTest(String hostIP) {boolean flag = false;try {connect(hostIP);flag = true;System.out.println("連接Linux成功");} catch (Exception e) {e.printStackTrace();} finally{session.disconnect();}return flag;}
}

创建完以上工具类后,我们可以自己写一个main方法来测试连接功能。

public static void main(String[] args) {JSchUtil jsch = new JSchUtil();jsch.connectTest("10.129.93.85");}

运行结果如下:
在这里插入图片描述
出现上述Console控制台的提示,说明我们已经可以通过java代码来连接Linux系统了。

三、实现java代码执行Linux的命令。

1.在你的JSchUtil工具类中 添加如下的新方法。

/*** 连接服务器后执行相应的linux命令* @param command* @throws JSchException*/public boolean execCmd(String hostIP,String command) throws JSchException {connect(hostIP);//连接指定IP地址的LinuxBufferedReader reader = null;Channel channel = null;//定义流通道try {while (command != null) {channel = session.openChannel("exec");((ChannelExec) channel).setCommand(command);channel.setInputStream(null);((ChannelExec) channel).setErrStream(System.err);// 获取流InputStream in = channel.getInputStream();//定义输入的通道channel.connect();//连接byte[] tmp = new byte[1024];while (true) {while (in.available() > 0) {int i = in.read(tmp, 0, 1024);if (i < 0) break;System.out.print(new String(tmp, 0, i));}if (channel.isClosed()) {if (in.available() > 0) continue;System.out.println("exit-status: " + channel.getExitStatus());if(channel.getExitStatus()!=0){return false;}break;}
//		            try {
//		                Thread.sleep(1000);
//		            } catch (Exception ee) {
//		            }}channel.disconnect();session.disconnect();System.out.println("Linux指令執行結束");return true;}} catch (IOException e) {e.printStackTrace();} catch (JSchException e) {e.printStackTrace();} finally {// 最后流和连接的关闭try {reader.close();} catch (IOException e) {e.printStackTrace();}}return true;}

添加完方法后,自然是进行测试。
这里我们使用简单的命令来测试命令是否执行成功。
2.在main方法中添加以下代码 ,用于测试

public static void main(String[] args) {JSchUtil jsch = new JSchUtil();try {jsch.execCmd("10.129.93.85", "mkdir /weikisa");} catch (Exception e) {e.printStackTrace();System.out.println("出現異常"+e.toString());}}	

执行结果如下:
在这里插入图片描述
结果exit-status: 0意味着执行过程没有异常,执行成功。
为了进一步验证,我们使用Putty(你也可以使用X-shell)连接上我们的Linux系统验证一下weikisa这个文件夹是否真的被创建出来。
在这里插入图片描述
看到weikisa已经创建在根目录下(“/”),说明我们的命令已经得以执行。
3.在执行一次删除命令,看看。
在这里插入图片描述
执行无误,我们再回到Linux系统下看看。
在这里插入图片描述
weikisa目录已经被删除了,说明基本的命令执行也可以实现了。

在最后附上JSchUtil的完整代码

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Random;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;/*** java 使用jsch远程链接linux 执行命令* @author Weikisa*/
public class JSchUtil {private static JSch jsch;private static Session session;private static String user = "root";private static String password = "R00tAtCT";private static String host = "10.129.93.85";//測試IP,實際使用以輸入IP地址為准public static void main(String[] args) {JSchUtil jsch = new JSchUtil();try {jsch.execCmd("你的Linux的IP地址", "mkdir /weikisa");jsch.execCmd("你的Linux的IP地址", "rmdir /weikisa");} catch (Exception e) {e.printStackTrace();}}/*** 首先连接服务器* @throws JSchException*/public static void connect(String hostIP) throws JSchException {jsch = new JSch();session = jsch.getSession(user, hostIP, 22);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");session.connect(60 * 1000);}/***連接測試*/public static boolean connectTest(String hostIP) {boolean flag = false;try {jsch = new JSch();session = jsch.getSession(user, hostIP, 22);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");session.connect(60 * 1000);flag = true;System.out.println("連接Linux成功");} catch (Exception e) {e.printStackTrace();} finally{session.disconnect();}return flag;}/*** 连接服务器后执行相应的linux命令* @param command* @throws JSchException*/public boolean execCmd(String hostIP,String command) throws JSchException {connect(hostIP);BufferedReader reader = null;Channel channel = null;try {while (command != null) {channel = session.openChannel("exec");((ChannelExec) channel).setCommand(command);channel.setInputStream(null);((ChannelExec) channel).setErrStream(System.err);// 获取流InputStream in = channel.getInputStream();channel.connect();byte[] tmp = new byte[1024];while (true) {while (in.available() > 0) {int i = in.read(tmp, 0, 1024);if (i < 0) break;System.out.print(new String(tmp, 0, i));}if (channel.isClosed()) {if (in.available() > 0) continue;System.out.println("exit-status: " + channel.getExitStatus());if(channel.getExitStatus()!=0){return false;}break;}
//		            try {
//		                Thread.sleep(1000);
//		            } catch (Exception ee) {
//		            }}channel.disconnect();session.disconnect();System.out.println("Linux指令執行結束");return true;}} catch (IOException e) {e.printStackTrace();} catch (JSchException e) {e.printStackTrace();} finally {// 最后流和连接的关闭try {reader.close();} catch (IOException e) {e.printStackTrace();}System.out.println("finally結束");}return true;}
}

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

相关文章

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

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

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

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

JSch学习笔记

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

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

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

OrmLite 数据库使用大全

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

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

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

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

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

Android数据库ORMlite框架

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

Ormlite 介绍 一

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

ormlite介绍一

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

Lite-Orm数据库

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

Android 数据库框架ormlite 使用精要

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

ormlite 的简单应用

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

OrmLite for android--Ormlite的大概介绍

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

Ormlite 介绍 一

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

Ormlite基本使用

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

Android 数据库框架ormlite 使用

ormlite是什么&#xff1f; 首先可以去它的官网看看www.ormlite.com&#xff0c;它的英文全称是Object Relational Mapping&#xff0c;意思是对象关系映射&#xff1b;如果接触过Java EE开发的&#xff0c;一定知道Java Web开发就有一个类似的数据库映射框架——Hibernate。简…

Android ORMLite数据库简介

&#xfeff;&#xfeff; 一般的项目中&#xff0c;Android自身提供的SQLite数据库&#xff0c;可以满足轻量级的数据存储应用&#xff0c;但是&#xff0c;只要是存储模型稍微复杂的项目&#xff0c;以及数据结构模型复杂的应用&#xff0c;就很难再用SQLite支撑整个项目的数…

python的网络请求库urllib、urllib2、urllib3、request的联系

文章目录 1. 简介2. urllib3. urllib24. urllib35. requests6. 相关文章 1. 简介 urllib、urllib2、urllib3、request均能通过网络访问互联网上的资源文件&#xff0c;它们通过使用统一资源定位符&#xff08;URL&#xff09;并结合re模块完成很多意想不到的操作。 urllib&am…

python3安装urllib2_python3.6想使用urllib2包怎么办

Python3.6.6或者说python3.x找不到urllib2语法问题修改之后&#xff0c;会报一个没有安装urllib2的包的错误。 通过pip install urllib2也会提示找不到包。(推荐学习&#xff1a;Python视频教程) 通过pip3 install urllib2也会提示找不到包。 这是因为builtwith依赖于urllib2包…