2016-08-11 11 views
4

リモートシステムでコマンドを実行し、同じ結果を取得したいと考えています。JSchを使用したリモートWindowsマシンへの接続

私は、次のコードを試してみました:

package rough; 
import java.io.InputStream; 
import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.ChannelExec; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.Session; 

public class RemoteSSH { 

    public static void main(String[] args) { 
     String host = "\\\\10.209.110.114"; 
     String user = "Administrator"; 
     String password = "Admin123"; 
     String command1 = "ipconfig"; 
     try { 
      java.util.Properties config = new java.util.Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      JSch jsch = new JSch(); 
      Session session = jsch.getSession(user, host, 22); 
      session.setPassword(password); 
      session.setConfig(config); 
      session.connect(); 
      System.out.println("Connected"); 

      Channel channel = session.openChannel("exec"); 
      ((ChannelExec) channel).setCommand(command1); 
      channel.setInputStream(null); 
      ((ChannelExec) channel).setErrStream(System.err); 

      InputStream in = channel.getInputStream(); 
      channel.connect(); 
      byte[] tmp = new byte[1024]; 
      while (true) { 
       while (in.available() > 0) { 
        int i = in.read(tmp, 0, 1024); 
        if (i < 0) 
         break; 
        System.out.print(new String(tmp, 0, i)); 
       } 
       if (channel.isClosed()) { 
         System.out.println("exit-status: " + channel.getExitStatus()); 
        break; 
       } 
       try { 
        Thread.sleep(1000); 
       } catch (Exception ee) { 
       } 
      } 
      channel.disconnect(); 
      session.disconnect(); 
      System.out.println("DONE"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

をしかし、私は次のエラー取得しています:

com.jcraft.jsch.JSchException: java.lang.IllegalArgumentException: protocol = socket host = null 
    at com.jcraft.jsch.Util.createSocket(Util.java:258) 
    at com.jcraft.jsch.Session.connect(Session.java:186) 
    at com.jcraft.jsch.Session.connect(Session.java:145) 
    at rough.RemoteSSH.main(RemoteSSH.java:23) 
Caused by: java.lang.IllegalArgumentException: protocol = socket host = null 
    at sun.net.spi.DefaultProxySelector.select(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at com.jcraft.jsch.Util.createSocket(Util.java:252) 
    ... 3 more 

にそれのためにすべてのソリューションを。 私はすでにpstoolで試していますが、正しい出力が得られていません。

+0

は、あなたが言うことができますか? – Abhishek

+0

とあなたのホストで実行中のos?あなたのコマンドが 'ifconfig'で、 'ipconfig'でない場合は、ubuntuである可能性があります。 – Abhishek

+0

こんにちは、私の両方のマシンはウィンドウです。また私は '////'を追加しました。なぜなら私はjavaで '//'をエスケープ文字として使用する必要があるからです。 – Aditya

答えて

4

私の野生の推測では、ターゲットマシン上でSSHサーバーを実行していないということです。

Windowsには、組み込みのSSHサーバーはありません。

まず、SSHサーバーをインストールしてください。

またはコマンドを実行するために、さまざまな技術を使用しますがある理由「\\\\」あなたのホスト文字列に
Best way to run remote commands on a Windows server from Java?

+0

を使用しています。別のエラーが発生しています:** com.jcraft.jsch.JSchException:Auth fail \t com.jcraft.jsch.Session.connect Session.java:473) \t at com.jcraft.jsch.Session.connect(Session.java:145) \t at rough.RemoteSSH.main(RemoteSSH.java:23)**私の資格情報は正しいですが、 – Aditya

+0

これまでのお返事ありがとうございました..この問題は、公開鍵に起因するものですが、その鍵を取得する方法とその公開鍵をどこに置くかについての問題です。 – Aditya

関連する問題