error messagejava.io.EOFException: вход закрыт в ожидаемом компоновщике
Я пытаюсь подключить интерактивное соединение с SSH с помощью кода Java. Я использовал JSCH и ожидаю, строитель. но это как меня "ошибка messagejava.io.EOFException: вход закрыт" в Exidbuilder. Но то же самое, что я подключаю через шпатлевку, она отлично работает. кто-нибудь может мне помочь, где я иду не так? Вот мой код
package src.main.java;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.concurrent.TimeUnit;
import javax.swing.JOptionPane;
import net.sf.expectit.Expect;
import net.sf.expectit.ExpectBuilder;
import net.sf.expectit.matcher.Matcher;
import net.sf.expectit.matcher.Matchers;
import net.sf.saxon.functions.Contains;
import com.eviware.soapui.support.scripting.SoapUIScriptEngine;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;
public class SSHConnect {
//String remoteFile="/home/john/test.txt";
public static void main(String[] args) {
String user = "user";
String password = "password";
String host = "hostname";
int port=22;
try
{
JSch jsch = new JSch();
// jsch.
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
Channel channel=session.openChannel("exec");
channel.connect();
System.out.println("chanel connect");
Expect expect = new ExpectBuilder()
.withInputs(channel.getInputStream())
.withOutput(channel.getOutputStream())
.withTimeout(10, TimeUnit.SECONDS)
.withExceptionOnFailure()
.build();
expect.interact();
Expect p= expect.sendLine("ssh serverName");
String check1=expect.expect(contains("Could"));
expect.sendLine("yes");
String check= expect.expect(contains("password"));
expect.sendLine("password");
System.out.println("check"+check1);
}
catch(Exception e){System.err.print("error message"+ e);}
}
private static Matcher contains(String string) {
Matcher matcher=Matchers.contains(string);
return matcher;
}
}
1 ответ
Попробуйте изменить тип канала JSch с "exec" на "shell".
Пожалуйста, следуйте этому примеру.