分享知识 传递快乐
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;