js运行shell命令,shell远程执行命令

  js运行shell命令,shell远程执行命令

  本文详细介绍了使用JSch远程执行Shell命令的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

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

  

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

   ChannelExec:一次执行一个命令。一般来说,这对我们来说已经足够了。

  ChannelShell:可以执行多个命令,很少用于开发。请根据你的需要来;

  channel exec channel exec=(channel exec)session . open channel( exec );//只能执行一条指令(或者可以执行符合的指令)

  channel shell channel shell=(channel shell)session . open channel( shell );//可以执行多个命令,但是每个命令只需要iostream

1. ChannelExec

  ;分开。注意:每个命令的执行都是成功的,不会影响其他命令的执行。换句话说,每个命令都会被执行,但不能保证每个命令都会被成功执行。

  每个命令由一个分隔。注意:如果前一个命令成功执行,将执行下面的命令。这可以确保所有命令都成功执行。

  每个命令都用分隔。注意:表示“或”,只有在前一条命令失败后才会执行下一条命令,直到一条命令执行成功。

  

2. ChannelShell

  对于ChannelShell,以输入流的形式,可以执行多条指令,就像在本地计算机上使用交互Shell一样(通常用于:交互使用)。如果你想停下来,有两种方法:

  发送退出命令,告诉程序本次交互结束;

  使用字节流中可用的方法获取数据的总大小,然后在循环中读取它。

  

使用示例

  

1. 引入 pom 依赖

  依赖性

  groupIdcom.jcraft/groupId

  artifactIdjsch/artifactId

  版本0 . 1 . 53/版本

  /dependency

2. jsch 使用示例

  在这里封装了一个shell工具类,用来执行Shell命令。具体使用细节在代码注释里有说明,可以直接复制使用。代码如下:

  包org . example . shell;/**

  *由强好好于2021/3/28创建

  */import com . j craft . jsch . channel exec;导入com . j craft . jsch . jsch;导入com . j craft . jsch . session;导入Java . io . buffered reader;导入Java . io . io exception;导入Java . io . inputstreamreader;/**

  * @描述:

  * @作者:qianghaohao

  * @时间:2021/3/28

  */公共类外壳程序{

  私有字符串主机;

  私有字符串用户名;

  私有字符串密码;

  private int port=22

  private int timeout=60 * 60 * 1000

  公共Shell(字符串主机、字符串用户名、字符串密码、int端口、int超时){

  this.host=host

  this.username=用户名;

  this.password=密码;

  this.port=port

  this . time out=time out;

  }

  公共Shell(字符串主机、字符串用户名、字符串密码){

  this.host=host

  this.username=用户名;

  this.password=密码;

  }

  公共字符串execCommand(字符串cmd) {

  JSch JSch=new JSch();

  Session session=null

  ChannelExec channelExec=null

  buffered reader inputStreamReader=null;

  buffered reader errInputStreamReader=null;

  StringBuilder runLog=new StringBuilder(“”);

  StringBuilder errLog=new StringBuilder(“”);

  尝试{

  //1.获取ssh会话

  session=jSch.getSession(用户名,主机,端口);

  session.setPassword(密码);

  session.setTimeout(超时);

  session . set config( StrictHostKeyChecking , no );

  session . connect();//获取ssh会话

  //2.在执行模式下执行shell命令。

  channel exec=(channel exec)session . open channel( exec );

  渠道主管。设置命令(cmd);

  渠道主管。connect();//执行命令

  //3.获取标准输入流

  inputStreamReader=新的缓冲读取器(新的inputStreamReader(通道执行。getinputstream()));

  //4.获取标准错误输入流

  errInputStreamReader=新缓冲读取器(新输入流读取器(通道执行。geterrstream()));

  //5.记录命令执行原木

  字符串行=空

  while((line=inputstreamreader。readline())!=null) {

  runLog.append(行)。追加( \ n );

  }

  //6.记录命令执行错误原木

  String errLine=null

  while((errLine=errinputstreamreader。readline())!=null) {

  errLog.append(errLine).追加( \ n );

  }

  //7.输出壳命令执行日志

  系统。出去。println( exit status= channel exec。getexit status(),openChannel.isClosed=

  渠道主管。是封闭的());

  System.out.println(命令执行完成,执行日志如下:);

  系统。出去。println(runlog。tostring());

  System.out.println(命令执行完成,执行错误日志如下:);

  系统。出去。println(错误日志。tostring());

  } catch(异常e) {

  e。printstacktrace();

  }最后{

  尝试{

  if (inputStreamReader!=null) {

  inputstreamreader。close();

  }

  if (errInputStreamReader!=null) {

  errinputstreamreader。close();

  }

  if (channelExec!=null) {

  渠道主管。disconnect();

  }

  如果(会话!=null) {

  会话。disconnect();

  }

  } catch (IOException e) {

  e。printstacktrace();

  }

  }

  返回运行日志。tostring();

  }}上述工具类使用:

  包org .示例导入org。举例。贝壳。外壳;/**

  *你好,世界!

  *

  */公共类应用程序{

  公共静态void main( String[] args ) {

  字符串cmd= ls-1 ;

  Shell Shell=新壳( 192。168 .10 .10 , ubuntu , 11111 );

  字符串exec log=shell。执行命令(cmd);

  系统。出去。println(execLog);

  }}推荐: 《java视频教程》 以上就是JSch如何远程执行壳命令的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: