天天看点

Jsch远程执行shell脚本命令分享知识 传递快乐

分享知识 传递快乐

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方法。

本文只总结一些要点,如若需要源码,请点击 查看源码。

————————————

如有不妥之处请留言指正。

相互学习,共同进步。