分享知识 传递快乐


JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。框架jsch很老的框架,更新到2016年,现在也不更新了。

Jsch 使用shell执行命令,有两种方法:

ChannelExec channelExec = (ChannelExec) session.openChannel("exec");//只能执行一条指令(也可执行符合指令)
ChannelShell channelShell = (ChannelShell) session.openChannel("shell");//可执行多条指令 不过需要输入输出流

ChannelExec

对于ChannelExec,在调用connect()方法之前这个命令提供了setCommand()方法,并且这些命令作为输入将以输入流的形式被发送出去。(通常,你只能有调用setCommand()方法一次,多次调用只有最后一次生效),但是你可以使用普通shell的分隔符来提供多个命令。这就像在你本机上执行一个shell脚本一样(当然,如果一个命令本身就是个交互式shell,这样就像ChannelShell)。

ChannelExec复合命令:

  • 每个命令之间用 ; 隔开。说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
  • 每个命令之间用 && 隔开。说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
  • 每个命令之间用 || 隔开。说明:|| 是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。

ChannelShell

对于ChannelShell,以输入流的形式,可执行多条指令,这就像在本地计算机上使用交互式shell(它通常用于:交互式使用)。如要要想停止,有两种方式:

  • 发送一个exit命令,告诉程序本次交互结束;
  • 使用字节流中的available方法,来获取数据的总大小,然后循环去读。


ChannelSftp

ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:

  • put():文件上传
  • get():文件下载
  • cd():进入指定目录
  • ls():得到指定目录下的文件列表
  • rename():重命名指定文件或目录
  • rm():删除指定文件
  • mkdir():创建目录
  • rmdir():删除目录


JSch支持三种文件传输模式:

  • OVERWRITE:完全覆盖模式,这是JSch的默认文件传输模式,即如果目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。
  • RESUME:恢复模式,如果文件已经传输一部分,这时由于网络或其他任何原因导致文件传输中断,如果下一次传输相同的文件,则会从上一次中断的地方续传。
  • APPEND:追加模式,如果目标文件已存在,传输的文件将在目标文件后追加。

SftpProgressMonitor接口类监控传输进度

JSch支持在文件传输时对传输进度的监控。可以实现JSch提供的SftpProgressMonitor接口来完成这个功能。

SftpProgressMonitor接口类方法:

  • init():当文件开始传输时,调用init方法。
  • count():当每次传输了一个数据块后,调用count方法,count方法的参数为这一次传输的数据块大小。
  • end():当传输结束时,调用end方法。
分享知识 传递快乐JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。框架jsch很老的框架,更新到2016年,现在也不更新了。Jsch 使用shell执行命令,有两种方法:ChannelExec channelExe... import com.jcraft. jsch . Channel ; import com.jcraft. jsch . Channel Exec ; import com.jcraft. jsch . JSch ; import com.jcraft. jsch . JSch Exception; import com.jcraft. jsch .Session...
JSch 是Java Secure Channel 的缩写。 JSch 是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。 本文只介绍如何使用 JSch 实现的 SFTP 功能。 SFTP 是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。 SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。 SFTP 是使用加密传输认证信息和传输的数据,所以
环境jdk:java7 操作系统: win7因为框架 jsch 比较老,所以对java版本要求好低。分析框架 jsch 我就不说了,很老的框架,现在也不更新了。 官网:http://www.jcraft.com/ jsch /最近在用 jsch 中的 Channel Shell 时,遇到问题:①这个方法会返回 命令 提示符,很烦; 比如我要 执行 下面几个 命令 Channel Shell channel =
有一个中间件安装时需要检测服务器上jdk的版本,若版本非1.8或者没有安装则给出提示,写一个用 Channel Exec 写了一个工具类,但是拿不到服务端的 执行 结果,查了下资料需要使用 Channel Shell ,在这里做下记录。 通过 Channel Shell 在服务端 执行 命令 ,一直没有返回结果的主要原因是,最后 执行 exit 命令 ,也就是说在你 执行 你想 执行 完你要 执行 命令 后需要加上exit 命令 ,服务...
Channel Shell Channel Exec Channel Sftp ,前两类用于 执行 命令 ( 命令 可以是 shell 语句,也可以是python xxx.py),后一种是用于上传下载文件。 Channel Shell Channel Exec 的区别: 前者是交互式的,在 channel .connect()之前,需要获取outputStream和inputStream,然后outputstream发送 命令 ,从instream中读取 命令 的结果(注意,发送 命令 之后,读取 命令 之前要等待一会儿,一般需要写个循环判断,每秒读一次
JSch 执行 shell 命令 参考: jsch Channel Shell Channel Exec 区别 参考: jsch Channel Shell Channel Exec 区别 package com.bob.smalltool; import com.jcraft. jsch .*; import jdk.internal.org.objectweb.asm.tree.TryCatchBlockNode;