2016-05-28 11 views
0

Ich versuche, interaktive Verbindung mit SSH mit Java-Code verbinden. Ich benutzte jsch und erwarte Builder. aber es ist howing mir "Fehlermeldung java.io.EOFException: Eingang geschlossen" in Expectbuilder. Aber das gleiche, was ich durch Putty verbinde, funktioniert es gut. Kann mir jemand helfen, wo ich falsch liege? Hier ist mein CodeFehlermeldung java.io.EOFException: Eingabe in Expect Builder geschlossen

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; 
    } 
} 

Antwort

0

Versuchen Sie, die JSch Kanal-Typ von "exec" auf "Shell" zu ändern.

Bitte folgen Sie dieser example.