首页 > 系统相关 >Jsch远程执行shell脚本命令

Jsch远程执行shell脚本命令

时间:2022-11-01 12:41:00浏览次数:44  
标签:Jsch 文件 shell 传输 JSch 命令 执行 远程


分享知识 传递快乐

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,文件,shell,传输,JSch,命令,执行,远程
From: https://blog.51cto.com/u_15856116/5813260

相关文章

  • Shell实现FTP上传文件,并保存执行日志
    分享知识 传递快乐 这篇文章是 ​​Linux实现FTP上传下载​​ 的续篇文章,关于FTP具体语法使用,请参考《​​Linux实现FTP上传下载​​》。FTP上传文件并保存执行日志#!/......
  • Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)
    分享知识传递快乐 1、函数定义linuxshell可以用户定义函数,然后在shell脚本中可以随便调用。Shell函数定义的语法格式如下:[function]funname[()]{函数体[retu......
  • Shell实现FTP下载文件,并保存执行日志
    分享知识 传递快乐 这篇文章是 ​​Linux实现FTP上传下载​​ 的续篇文章,关于FTP具体语法使用,请参考《​​Linux实现FTP上传下载​​》。FTP下载文件并保存执行日志#!/......
  • shell函数
    shell函数一,函数的定义(两种方式)1.function函数名{command}//这是一种规范写法2.函数名(){//最常用因为最简洁command}函数定义完之后并不会自动......
  • shell循环,函数
    ###########################函数function语法:函数名(){returnm}函数名=========如:#!/bin/basholdboy(){echo'iamoldboy'}oldboy ####################......
  • shell循环语句
    循环语句的作用在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同。例如,根据通讯录中的姓名列表创建系统账号,根据服务......
  • 运行shell脚本提示“语法错误: 未预期的文件结尾”
    当时正在写一个小需求,shell脚本实现的功能是:通过read读入变量实现加减剩除等,而且要判断一个输入的2个变量是否为空,为空值则退出。输入的变量不是数字则退出。自己编写的代......
  • shell编程 不全
    shell编程>>>![image-20220331084804558](C:\Users\Windows\AppData\Roaming\Typora\typora-user-images\image-20220331084804558.png)>>>>![image-202203310850......
  • PowerShell DSC由哪个进程运行?
    查询msft_providersGet-WmiObjectmsft_providers|selectprovider获得进程$dscProcessID=Get-WmiObjectmsft_providers|Where-Object{$_.provider-like'ds......
  • 学习笔记-无字母数字Webshell
    无字母数字Webshell相关文章&Source&Reference记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)一些不包含数字和字母的webshell无字母数字W......