JSch是一个用于在Java平台上实现SSH连接的库。它提供了一个Java实现的SSH2协议客户端,可以用于在Java应用程序中进行SSH连接、文件传输和远程命令执行等操作。

JSch库提供了以下关键功能:

1. SSH连接:JSch允许建立到SSH服务器的安全连接。它支持密码认证、公钥认证和密钥交换等多种身份验证方法。

2. 文件传输:JSch可以执行SCP(Secure Copy)和SFTP(SSH File Transfer Protocol)协议,用于在本地计算机和远程服务器之间进行文件传输。通过JSch,可以上传、下载或管理远程服务器上的文件。

3. 远程命令执行:JSch允许在远程服务器上执行命令。你可以使用JSch打开一个远程Shell会话,并执行命令,获取输出或处理错误。

JSch库的使用相对简单,通过创建一个`Session`对象,设置身份验证和连接参数,然后使用`Channel`进行文件传输或执行远程命令。

以下是使用JSch库的一些常见操作:
- 建立SSH会话:使用`Session`类建立到远程服务器的安全连接。
- 传输文件:通过`ChannelSftp`类执行SCP或SFTP协议进行文件传输。
- 执行远程命令:通过`ChannelExec`类在远程Shell会话中执行命令。

除了上述功能,JSch还提供了其他一些选项,如端口转发和SSH代理等。

需要注意的是,使用JSch时需要考虑安全性,并在处理密码、密钥和敏感数据时采取适当的措施。

总之,JSch是一个强大且灵活的SSH连接库,使得在Java应用程序中实现SSH功能变得相对容易。它为开发者提供了无缝访问和操作远程服务器的能力,使得远程服务器管理、文件传输和远程命令执行等操作更加便捷。

入门案例:exec用于执行命令;sftp用于文件处理

package com.wyg.simple;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.Vector; 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;
import com.jcraft.jsch.SftpException; public class JSchUtils {
private static JSch jsch;
private static Session session; /**
* 连接到指定的IP
*
* @throws JSchException
*/
public static void connect(String user, String passwd, String host, int port) throws JSchException {
jsch = new JSch();// 创建JSch对象
session = jsch.getSession(user, host, port);// 根据用户名、主机ip、端口号获取一个Session对象
session.setPassword(passwd);// 设置密码 Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);// 为Session对象设置properties
session.setTimeout(1500);// 设置超时
session.connect();// 通过Session建立连接
} /**
* 关闭连接
*/
public static void close() {
session.disconnect();
} /**
* 执行相关的命令
*
* @throws JSchException
*/
public static void execCmd(String command) throws JSchException {
BufferedReader reader = null;
Channel channel = null;
try {
if (command != null) {
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// ((ChannelExec) channel).setErrStream(System.err);
channel.connect(); InputStream in = channel.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
String buf = null;
while ((buf = reader.readLine()) != null) {
System.out.println(buf);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSchException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
channel.disconnect();
}
} /**
* 上传文件
*
* @param directory
* 上传的目录
* @param uploadFile
* 要上传的文件
* @param sftp
* @throws JSchException
* @throws SftpException
* @throws FileNotFoundException
*/
public void upload(String directory, String uploadFile) throws JSchException, FileNotFoundException, SftpException {
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.cd(directory);
File file = new File(uploadFile);
channelSftp.put(new FileInputStream(file), file.getName());
System.out.println("Upload Success!");
} /**
* 下载文件
*
* @param src
* @param dst
* @throws JSchException
* @throws SftpException
*/
public static void download(String src, String dst) throws JSchException, SftpException {
// src linux服务器文件地址,dst 本地存放地址
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
channelSftp.get(src, dst);
channelSftp.quit();
} /**
* 删除文件
*
* @param directory
* 要删除文件所在目录
* @param deleteFile
* 要删除的文件
* @param sftp
* @throws SftpException
* @throws JSchException
*/
public void delete(String directory, String deleteFile) throws SftpException, JSchException {
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.cd(directory);
channelSftp.rm(deleteFile);
} /**
* 列出目录下的文件
*
* @param directory
* 要列出的目录
* @param sftp
* @return
* @throws SftpException
* @throws JSchException
*/
@SuppressWarnings("rawtypes")
public Vector listFiles(String directory) throws JSchException, SftpException {
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
return channelSftp.ls(directory);
} public static void main(String[] args) {
try {
// 1.连接到指定的服务器
connect("root", "sankairoot", "10.0.0.251", 22); // 2.执行相关的命令
execCmd("grep '160622150549943666' /data/apps/nginx/logs/access_2016-07-07.log >> /data/nginx_log.20160707.txt"); // 3.下载文件
download("/data/nginx_log.20160707.txt", "D:\\temp"); // 4.关闭连接
close();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SftpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

JSch库入门实战应用,推荐大家学习的更多相关文章

  1. 深度学习入门实战(二)-用TensorFlow训练线性回归

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :董超 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能 ...

  2. Spark入门实战系列--8.Spark MLlib(下)--机器学习库SparkMLlib实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .MLlib实例 1.1 聚类实例 1.1.1 算法说明 聚类(Cluster analys ...

  3. Github点赞超多的Spring Boot学习教程+实战项目推荐!

    Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!   很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Boot 进行开发,毕竟它这 ...

  4. JMeter学习-004-WEB脚本入门实战

    此文为 JMeter 入门实战实例.我是 JMeter 初学菜鸟一个,因而此文适合 JMeter 初学者参阅.同时,因本人知识有限,若文中存在不足的地方,敬请大神不吝指正,非常感谢! 闲话少述,话归正 ...

  5. Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学 ...

  6. C++ CMake 入门实战[转载]

    C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...

  7. 003-Tuple、Array、Map与文件操作入门实战

    003-Tuple.Array.Map与文件操作入门实战 Tuple 各个元素可以类型不同 注意索引的方式 下标从1开始 灵活 Array 注意for循环的until用法 数组的索引方式 上面的for ...

  8. Spark入门实战系列--1.Spark及其生态圈简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...

  9. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  10. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...

随机推荐

  1. SciTech-BigDataAIML-CV+CG-Digital Image/Signal Processing-

    Links: Lectures: https://mandeel.github.io/lectures.html https://mandeel.github.io/ A Ph.D. in compu ...

  2. FreeSwitch Hangup-Cause电话挂断原因速查

    Freeswitch官网太慢了,经常还打不开,把电话挂断原因大全复制一份到这里,方便日常查看 ITU-T Q.850 Code SIP Equiv. Enumeration Cause Descrip ...

  3. CPU 负载高,到底应不应该告警?

    CPU 负载高,到底应不应该告警? 不告警吧,出了问题怕被怼,嫌你告警缺失 告警吧,好像全是噪音,工程师都自动忽略了 尴尬... 成年人的世界没有非黑即白,如果要严肃的论述,就要加很多限定词,为了避免 ...

  4. 亚马逊AutoML论文获最佳论文奖

    亚马逊在首届AutoML会议上荣获最佳论文奖 论文提出了一种停止超参数优化过程的新准则 在首届自动化机器学习(AutoML)会议上,我们团队凭借关于贝叶斯优化终止方法的研究获得最佳论文奖.该研究解决了 ...

  5. 基于 RuoYi-Vue-Pro 定制了一个后台管理系统 , 开源出来!

    项目地址:https://github.com/makemyownlife/magic-admin 1 项目背景 从职业生涯伊始,我一直是微服务架构的坚定拥趸,这很大程度上源于长期深耕互联网行业,习惯 ...

  6. Cannot read property 'scales' of undefined

    该报错在 antv f2 绘制柱状图文本是产生 原因: 在图表渲染之前绘制 解决:在 chart.render(); 之后绘制 // .... chart.render(); // 绘制柱状图文本 c ...

  7. always offline

    我们这种生物啊,一边吐血一边奔跑的样子-- 超酷的不是吗? 友人云, 世界末日不会在夏天. 熬过这个六月吧. 帘卷西风.人比黄花瘦.

  8. 关于SQL脚本中的 from where and 1=0 的写法

    where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表 "SELECT * FROM XXX WHERE 1 = 0"; 该select语 ...

  9. linux下配置ssh会话超时

    Linux下设置超时时间,是在配置文件/etc/profile里.在该文件下,添加一个变量: export TMOUT=3600 时间单位是S,上面配置的超时时间是1个小时. 另外,在ssh配置文件/ ...

  10. LangGraph官方文档笔记——6.时间旅行

    目录 创建聊天机器人 添加步骤 重放完整状态历史 从检查点恢复 从某一时刻加载状态 在典型的聊天机器人工作流中,用户与机器人交互 1 次或多次来完成任务.在前面的部分中,我们看到了如何添加记忆和人在回 ...