- 建立会话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);
- shell 命令需要在通道Channel中执行。Channel链接输入流和输出流来作为命令的输入和执行结果返回。
Channel channel = session.openChannel("shell"); channel.setInputStream(System.in); channel.setOutputStream(System.out); channel.connect(3 * 1000); - 此时Channel已经链接上,直接在Console中输入即可以。
- 执行单独一条命令。注意此处的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();

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