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";
}
}
我使用Netbeans作为IDE
你能帮我找出问题吗?!
我拿到了。
while循环中的line从不为空。
它为什么在调试中工作仍然是个谜。
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;
}
}
问题内容: 我正在SSH shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch 。 我也在 StackOverflow* 上也遵循此示例编写了自己的代码 * 这是 我的代码: 看起来不错,但奇怪的是 它只能在调试模式下工作 。如果我运行它,程序将无法执行。我认为它锁定 了while循环, 但是我不明白为什么。没有while循环,代码将到达终点,但是不执行任何shell命令。 我
我正在寻找一个解决方案,采取SSH连接,然后是Telnet连接到远程系统通过Java。由于只有使用telnet连接,我才能在远程计算机上执行该特定命令。 在大量浏览之后,我找到了这个答案“https://stackoverflow.com/questions/27146991/running-telnet-command-on-remote-ssh-session-using-jsch”,但是在执
我目前正在尝试编写一个android应用程序,该应用程序通过ssh对远程机器执行简单的“ls”命令。我尝试使用JSch和此页面,但似乎不起作用。我环顾四周,似乎必须实现一些Async任务来运行代码。以下是当前主要活动的整个代码: 在Androidanifest.xml中添加uses-权限android: name="android.permission.INTERNET" 这是我第一次尝试任何严肃
Infact挂起。如果我删除多级ssh,一切都很好!我做错什么了吗?? 我从以下方面得到了一些提示:Java中的多级SSH登录和使用JSch的多个命令,但我无法运行代码。
我试图在unix中使用JSCHSSH类(com.jcraft.jsch)执行一些工具。我的工具有一个选择菜单。我需要转到工具所在的文件夹,执行它并选择请求的选项。在每个命令之后,(cd,execute,…)我希望检查输出并检查状态代码(0/1)。我有下面的代码按预期执行它,但在这段代码中,我找不到一种方法来检查每个命令后的输出。 我无法找到一种方法,但我怎么能分开的命令,并打印他们一个接一个(在同
问题内容: Scenerio:我想通过ssh从Java程序在远程机器上运行命令(我在开发机器上使用OpenSSH)。我也想通过传递密码来建立ssh连接,而不是像使用“期望”那样设置密钥。 问题:尝试执行“期望”之类的密码登录时,使用ProcessBuilder创建的流程似乎看不到密码提示。当运行常规的非ssh命令(例如’ls’)时,我可以获取流并与它们进行交互。我将标准错误和标准输出合并为一个流因