我正在寻找一个解决方案,采取SSH连接,然后是Telnet连接到远程系统通过Java。由于只有使用telnet连接,我才能在远程计算机上执行该特定命令。
在大量浏览之后,我找到了这个答案“https://stackoverflow.com/questions/27146991/running-telnet-command-on-remote-ssh-session-using-jsch”,但是在执行“telnet localhost4444”之后,程序执行会挂起&永远不会从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");
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本地主机4444
启动转换器ABCLOC高电平
转义字符为“^]”。
连接到接口层heart beat telnet LocalHost4444
启动转换器ABCLOC高电平
////此程序挂起后,不执行任何操作
在端口4444上运行的服务器与您的不同,但在JSCH中发出“Telnet LocalHost80”和“get/”的本地测试中,我得到了类似的行为。在我的例子中,修复是要小心“连接关闭”消息的准确性。在我的例子中,服务器发送:
连接被外来主机关闭。
而您的代码正在检查
问题内容: 我正在SSH shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch 。 我也在 StackOverflow* 上也遵循此示例编写了自己的代码 * 这是 我的代码: 看起来不错,但奇怪的是 它只能在调试模式下工作 。如果我运行它,程序将无法执行。我认为它锁定 了while循环, 但是我不明白为什么。没有while循环,代码将到达终点,但是不执行任何shell命令。 我
我使用Netbeans作为IDE 你能帮我找出问题吗?!
Infact挂起。如果我删除多级ssh,一切都很好!我做错什么了吗?? 我从以下方面得到了一些提示:Java中的多级SSH登录和使用JSch的多个命令,但我无法运行代码。
我试图在unix中使用JSCHSSH类(com.jcraft.jsch)执行一些工具。我的工具有一个选择菜单。我需要转到工具所在的文件夹,执行它并选择请求的选项。在每个命令之后,(cd,execute,…)我希望检查输出并检查状态代码(0/1)。我有下面的代码按预期执行它,但在这段代码中,我找不到一种方法来检查每个命令后的输出。 我无法找到一种方法,但我怎么能分开的命令,并打印他们一个接一个(在同
我正在尝试编写一个Java代码,它可以ssh到Unix服务器并重置用户密码。所以我尝试实现SO中的一些代码。 如。 通过JavaJSch通过ssh向远程服务器发送命令 从字符串中获取命令(密码)并设置为InputStream到Java(JSCH)中的Unix服务器 使用JSch,我按照此链接获取重置用户密码的正确命令。 当我试着运行这段代码时,它似乎没有重置用户的密码。因此,我尝试直接从Unix的
为什么/我的目标: 我有一个由pi组成的小型网状网络,每天大部分时间都在运行脚本。我想取消停机时间,但是代码有时会在连续循环3-4天后停止工作,(有时长达一周,代码才会出现错误并停止)。 每个节点上运行的脚本用“最后签入”字段更新mySQL数据库。 我希望用Java编写一个小型后台程序,它将在我的服务器上无限期运行,时不时地检查每个站点的“最后签入”,如果它注意到一个节点宕机,远程ssh进入该节点