2016-05-28 9 views
0

javaコードを使用してSSHとの対話型接続を試みています。私はjschを使ってビルダーを期待しています。しかし、それは私のことだよ"error messagejava.io.EOFException:入力が閉じられました"がexpectbuilderにあります。しかし、同じことを私はパテを介して接続すると正常に動作します。誰かが私が間違っているところで私を助けることができますか? ここに私のコードだerror messagejava.io.EOFException:期待ビルダーで入力が閉じられました

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

答えて

0

「シェル」に「実行」からJSCHチャンネルタイプを変更してみてください。

これに続いてください。example

関連する問題