2025年JSH使用

JSH使用建立会话 session Jsch 建立会话 session 需要一个实现了 UserInfo 的类 自定义 UserInfo private static class MyUserInfo implements UserInfo Override public String getPassphras

大家好,我是讯享网,很高兴认识大家。
  1. 建立会话session
  • Jsch建立会话session需要一个实现了UserInfo的类。
    /* * 自定义UserInfo * */ private static class MyUserInfo implements UserInfo { 
          @Override public String getPassphrase() { 
          return null; } @Override public String getPassword() { 
          return null; } @Override public boolean promptPassword(String s) { 
          return false; } @Override public boolean promptPassphrase(String s) { 
          return false; } @Override public boolean promptYesNo(String s) { 
          System.out.println(s); System.out.println("true"); return true; } @Override public void showMessage(String s) { 
          } } 

    讯享网
    • 建立会话
    讯享网JSch jsch = new JSch(); session = jsch.getSession("root", "localhost", 22); session.setPassword("password"); session.setUserInfo(new MyUserInfo()); session.connect(SESSION_TIMEOUT); 
  1. shell 命令需要在通道Channel中执行。Channel链接输入流和输出流来作为命令的输入和执行结果返回。


    讯享网

    Channel channel = session.openChannel("shell"); channel.setInputStream(System.in); channel.setOutputStream(System.out); channel.connect(3 * 1000); 
  2. 此时Channel已经链接上,直接在Console中输入即可以。
  3. 执行单独一条命令。注意此处的exec 和上面的shell的差别。
    讯享网ChannelExec channelExec = (ChannelExec) session.openChannel("exec"); channelExec.setCommand(cmd); // 待执行的命令 channelExec.setInputStream(null); channelExec.setErrStream(System.err); // X Forwarding // channel.setXForwarding(true); InputStream in = channelExec.getInputStream(); channelExec.connect(); int res = -1; StringBuffer buf = new StringBuffer(1024); byte[] tmp = new byte[1024]; while (true) { 
          while (in.available() > 0) { 
          int i = in.read(tmp, 0, 1024); if (i < 0) break; buf.append(new String(tmp, 0, i)); } if (channelExec.isClosed()) { 
          res = channelExec.getExitStatus(); System.out.println(format("Exit-status: %d", res)); break; } TimeUnit.MILLISECONDS.sleep(100); } System.out.println(buf.toString()); channelExec.disconnect(); 
小讯
上一篇 2025-03-25 11:31
下一篇 2025-01-05 19:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15050.html