2017-02-25 62 views
4

JSchを使用して、ssh経由でコンピュータに接続してからコマンドを実行しようとしています。JSchExceptionタイムアウト:ソケットが確立されていません

しかし、コードを実行すると決してコンピュータに接続しません。そして次のエラー:これは私の最初の時間がJSCHを使用している

protected void sshTesting(){ 
    String name = ""; 
    String userName = "kalenpw"; 
    String password = "hunter2"; 
    String ip = "192.168.0.4"; 
    int port = 22; 
    String command = "cmus-remote -u"; 

    try{ 
     JSch jsch = new JSch(); 
     Session session = jsch.getSession(userName, ip, port); 
     session.setPassword(password); 
     session.setConfig("StrictHostKeyChecking", "no"); 


     System.out.println("Establishing connection"); 
     session.connect(10); 

     Channel channel = session.openChannel("exec"); 
     ((ChannelExec)channel).setCommand(command); 
     channel.setInputStream(null); 
     channel.connect(10000); 

//   name = session.getUserName(); 
//   System.out.println(session.getHost()); 


    } 
    catch(Exception e){ 
     System.err.print(e); 
     System.out.print(e); 
    }   

} 

ので、私はかなりちょうど彼らの例Exec.javaの1次午前:

I/System.out: com.jcraft.jsch.JSchException: timeout: socket is not established

はここに私の関連するコードです。私はこの回答を見つけました JSch/SSHJ - Connecting to SSH server on button click残念なことに私のコードは、それはまだ結果と同様の方法で接続を確立しているように見えます。私はSSHingを通常のコンピュータにテストしています。問題はサーバではなく、自分のコードであるとは思えません。ここで

は、全体のスタックトレースです:

W/System.err: com.jcraft.jsch.JSchException: timeout: socket is not establishedcom.jcraft.jsch.JSchException: timeout: socket is not established 
W/System.err:  at com.jcraft.jsch.Util.createSocket(Util.java:394) 
W/System.err:  at com.jcraft.jsch.Session.connect(Session.java:215) 
W/System.err:  at com.example.kalenpw.myfirstapp.RectangleClickActivity.sshTesting(RectangleClickActivity.java:97) 
W/System.err:  at com.example.kalenpw.myfirstapp.RectangleClickActivity$1.onCheckedChanged(RectangleClickActivity.java:56) 
W/System.err:  at android.widget.CompoundButton.setChecked(CompoundButton.java:165) 
W/System.err:  at android.widget.Switch.setChecked(Switch.java:1151) 
W/System.err:  at android.widget.Switch.toggle(Switch.java:1146) 
W/System.err:  at android.widget.CompoundButton.performClick(CompoundButton.java:123) 
W/System.err:  at android.view.View$PerformClick.run(View.java:22589) 
W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
W/System.err:  at android.os.Looper.loop(Looper.java:148) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:7325) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

RectangleClickActivity.javaは、私はSSHをテストしていたファイルです。

ライン97は以下のとおりです。session.connect(10);

ライン56は以下のとおりです。sshTesting();

+0

は、あなたがそれも、接続を試みていますかどうかを確認するためにWiresharkのを使用してトラフィックを見たことがありますか?あなたの2つのシステムの間にネットワークやファイアウォールの問題があることを示唆する以外の情報がなければ、ここに誰も助けてくれることはありません。 –

+0

@ジムガリソンはい、私は端末に接続することができます。私はちょうどWiresharkを試してみました。以前はそれを使用したことがありませんでしたので、詳細を分析する方法がわかりませんが、接続しようとすると、コンピュータに目的地としてのエントリがいくつかあるので、接続しようとしています。私は同じローカルネットワーク上にいるので、ネットワークやファイアウォールが問題であるかどうかはわかりませんが、おそらくそこにあります。それ以外に何を確認することができますか? – kalenpw

+0

コード内のどの行が例外をスローしますか?完全なスタックトレースも投稿してください。 –

答えて

2

問題は、私がsession.setConfig("StrictHostKeyChecking", "no");に設定を設定したことになったが、何らかの理由であなたは設定を作成し、StrictHostKeyCheckingを設定する必要があり、その設定を直接設定するのではなく、セッションに追加します。

作業コードは次のようになります。

protected void sshTesting(){ 
    String name = ""; 
    String userName = "kalenpw"; 
    String password = "hunter2"; 
    String ip = "192.168.0.4"; 
    int port = 22; 
    String command = "cmus-remote -u"; 

    try{ 
     JSch jsch = new JSch(); 
     Session session = jsch.getSession(userName, ip, port); 
     session.setPassword(password); 

     //Missing code 
     java.util.Properties config = new java.util.Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     session.setConfig(config); 
     // 


     System.out.println("Establishing connection"); 
     session.connect(10); 

     Channel channel = session.openChannel("exec"); 
     ((ChannelExec)channel).setCommand(command); 
     channel.setInputStream(null); 
     channel.connect(10000); 

//   name = session.getUserName(); 
//   System.out.println(session.getHost()); 

    } 
    catch(Exception e){ 
     System.err.print(e); 
     System.out.print(e); 
    }   

} 
関連する問題