【发布时间】:2017-08-13 16:07:00
【问题描述】:
我正在寻找一种解决方案,先通过 Java 进行 SSH 连接,然后通过 Telnet 连接到远程系统。由于仅使用 telnet 连接,我可以在远程机器上执行该特定命令。
在浏览了很多之后,我找到了这个答案“https://stackoverflow.com/questions/27146991/running-telnet-command-on-remote-ssh-session-using-jsch”但是在执行“telnet localhost 4444”之后,程序执行挂起并且永远不会从 while 循环中出来。因此,在进行 telnet 连接后,我无法执行其他命令。
我的代码是:-
public static void main(String[] arg) {
try {
System.out.println(telnetConnection(command, puttyUserName,
puttyPassword, puttyHostName));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String telnetConnection(String command, String user, String password, String host)
throws JSchException, Exception {
JSch jsch = new JSch();
jsch.addIdentity(puttyPublicKey, puttyPassword);
Session session = jsch.getSession(user, host, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.connect(500);//This timeout is not working as mentioned in the example. Program execution never stops.
Channel channel = session.openChannel("shell");
channel.connect(500);
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 4444\r\n"); after this no commands executes
dataOut.writeBytes(command + "\r\n");
dataOut.writeBytes("quit\r\n");
// 使用 quit 我可以退出 telnet 会话,同时通过 putty 手动操作,因为 exit 不起作用
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";
System.out.println("heart beat" + result);
}
System.out.println("after while done");
dataIn.close();
dataOut.close();
channel.disconnect();
session.disconnect();
System.out.println("done");
return result;
}
}
输出//
心跳 telnet localhost 4444
START TRANSLATOR ABCLOC HIGH
退出
退出
[XYZ]$ 远程登录 localhost 4444 正在尝试 x.x.x.1...
连接到 localhost.localdomain (x.x.x.1)。
转义字符是'^]'。
到接口层的连接 心跳 telnet localhost 4444
START TRANSLATOR ABCLOC HIGH
退出
退出
[XYZ]$ 远程登录 localhost 4444 正在尝试 x.x.x.1...
连接到 localhost.localdomain (x.x.x.1)。
转义字符是'^]'。
到接口层的连接 为命令列表键入“帮助”
////在这个程序挂起并且没有执行任何操作之后
【问题讨论】: