使用JSch在远程SSH会话上运行telnet命令

我正在telnetSSH

shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch 。

我也在 *

这是

package Utility;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.InputStreamReader;

public class JavaTelnet {

public static void main(String[] arg) {

try {

System.out.println(telnetConnection(USER_ID,PASSWORD,REMOTE_HOST));

} catch (Exception e) {

e.printStackTrace();

}

}

public static String telnetConnection(String user, String password, String host) throws JSchException, Exception {

JSch jsch=new JSch();

Session session=jsch.getSession(user, host, 22);

session.setPassword(password);

// It must not be recommended, but if you want to skip host-key check,

session.setConfig("StrictHostKeyChecking", "no");

session.connect();

//session.connect(30000); // making a connection with timeout.

Channel channel=session.openChannel("shell");

channel.connect();

DataInputStream dataIn = new DataInputStream(channel.getInputStream());

BufferedReader reader = new BufferedReader(new InputStreamReader(dataIn));

DataOutputStream dataOut = new DataOutputStream(channel.getOutputStream());

dataOut.writeBytes("telnet localhost 4242\r\n");

/*

* telnet COMMANDS here

*/

dataOut.writeBytes("exit\r\n");

dataOut.writeBytes("logout\r\n");

dataOut.flush();

String line = reader.readLine();

String result = line +"\n";

while ((line= reader.readLine())!=null){

result += line +"\n";

}

dataIn.close();

dataOut.close();

System.out.println("disconnecting....");

channel.disconnect();

session.disconnect();

return "done";

}

}

看起来不错,但奇怪的是 。如果我运行它,程序将无法执行。我认为它锁定 了while循环,

但是我不明白为什么。没有while循环,代码将到达终点,但是不执行任何shell命令。

作为IDE

您能帮我发现问题吗?

回答:

我知道了。

__在while循环中, line 永远不会为 null

为何在调试中起作用仍是一个谜。

我正在发布 。我希望它对每个想做类似事情的人都有帮助。

package Utility;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.InputStreamReader;

public class JavaTelnet {

public static void main(String[] arg) {

try {

System.out.println(telnetConnection(YOUR_COMMAND,YOUR_USER,YOUR_PASS,YOUR_HOST));

} catch (Exception e) {

e.printStackTrace();

}

}

public static String telnetConnection(String command, String user, String password, String host) throws JSchException, Exception {

JSch jsch=new JSch();

Session session=jsch.getSession(user, host, 22);

session.setPassword(password);

// It must not be recommended, but if you want to skip host-key check,

session.setConfig("StrictHostKeyChecking", "no");

session.connect(3000);

//session.connect(30000); // making a connection with timeout.

Channel channel=session.openChannel("shell");

channel.connect(3000);

DataInputStream dataIn = new DataInputStream(channel.getInputStream());

BufferedReader reader = new BufferedReader(new InputStreamReader(dataIn));

DataOutputStream dataOut = new DataOutputStream(channel.getOutputStream());

System.out.println("Starting telnet connection...");

dataOut.writeBytes("telnet localhost 4242\r\n");

// dataOut.writeBytes("enable\r\n");

dataOut.writeBytes(command+"\r\n");

dataOut.writeBytes("exit\r\n"); //exit from telnet

dataOut.writeBytes("exit\r\n"); //exit from shell

dataOut.flush();

String line = reader.readLine();

String result = line +"\n";

while (!(line= reader.readLine()).equals("Connection closed by foreign host")){

result += line +"\n";

}

dataIn.close();

dataOut.close();

channel.disconnect();

session.disconnect();

return result;

}

}

注意,该外壳是Linux外壳。在Windows中,“退出”命令应该不同

以上是 使用JSch在远程SSH会话上运行telnet命令 的全部内容, 来源链接: utcz.com/qa/421455.html

回到顶部