2011-10-20 9 views
0

私はLinuxプログラムを使って自分のLinuxサーバーでSSHをやっていますが、シェルスクリプトのようなコマンドを実行することができます。しかし、問題は、特定のシェルスクリプトを実行しているときにyesまたはnoを選択するオプションを与えているときです。私のjavaコンソールからはyesを選択していますが、これは実際にLinuxサーバと対話していません。どのようにJavaプログラミングを介してこの仕事をするには?あなたがコードspakeを持っている場合は、共有してください。私はSSHを行うための私のコードをshairingです。JAVAプログラムからSSH経由で対話できない

String arr1[]=new String[arr.length]; 
    ReadConfig rc=new ReadConfig(); 
    rc.readConfig(); 
    hostname=rc.hostname; 
    username=rc.username; 
    password=rc.password; 
    for(int i=0;i<arr.length;i++) 
    { 
     arr1[i]= arr[i]; 
     System.out.println("the array value "+arr1[i]+" "+i); 
    } 

    try{ 
     String com=arr1[5].toString().trim(); 
     System.out.println(" "+com); 
     /* Create a connection instance */ 

     conn = new Connection(hostname); 

     /* Now connect */ 
       conn.connect(); 


       /* Authenticate. 
     * If you get an IOException saying something like 
     * "Authentication method password not supported by the server at this stage." 
     * then please check the FAQ. 
     */ 

      boolean isAuthenticated = conn.authenticateWithPassword(username, password); 


       if (isAuthenticated == false) 
        throw new IOException("Authentication failed."); 

       /* Create a session */ 

       sess = conn.openSession(); 
       try{ 
        sess.execCommand(com); 


       //obj.append("Pass"); 
       }catch(Exception e){ 


        //obj.append("Fail"); 
       } 
       //Session sess1 = conn.openSession(); 
       System.out.println("Here is some information about the remote host:"); 
       InputStream stdout = new StreamGobbler(sess.getStdout()); 
       BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

       while (true) 
       { 
        String line = br.readLine(); 
        if (line == null) 
         break; 
        System.out.println(line); 
       } 
       /* Show exit status, if available (otherwise "null") */ 

       System.out.println("ExitCode: " + sess.getExitStatus()); 

    }catch (Exception e) { 
     // TODO: handle exception 
    }finally{ 
     /* Close this session */ 
    //obj.close(); 
     sess.close(); 
     /* Close the connection */ 

     conn.close(); 
    } 
+0

Ganymed-SSH2を使用しているようです。それが何であれ、あなたはその質問の中でそう言うべきです。しかし、シェルスクリプトが何かをして、コンソールから入力を得るのであれば、実際には何もできません。 – EJP

+0

はい私はganymade sshを使用していますが、Linuxサーバーと対話させる方法はありますか? – user993158

答えて

-2

「はい」コマンドを使用できます。 Yesから次のコマンドにパイプ出力

yes | apt-get install some_software 
+0

申し訳ありませんが、あなたのアイデアを得ることができません。すべてのコマンド文字列にこの – user993158

+0

という接頭辞 "yes |"を付けるようにしてください。 yesコマンドは "y"を出力し、|この出力を次のコマンドへの入力として送ることができます。したがって、コマンドを実行して入力を待つときは、yesコマンドから取得します。 場合があります。 –

+1

申し訳ありませんが、あなたはシェルを使用していないので動作しませんが、むしろコマンドを実行しています。シェルを起動すると、他のワームを開くことができます。最も簡単な方法は、おそらくあなたが望むことをするシェルスクリプトを書いて、実行することです* sshを使って*) – KarlP

1

入力ストリームに何も書き込んでいません。 Javaコンソールに入力するだけでは何もしません。

セッションはstdin-のOutputStreamのためのPrintWriterを作成します。

次にあなたがout.println("y")ことができますがする必要がある場合。 java-consoleを使用してインタラクティブ機能が必要な場合は、System.inから読み込んで出力ストリームに送信する必要があります。

PrintWriter out = createPW(new OutputStreamWriter(sess.getStdin()), true); 

ここでは、適切な行区切り文字を使用してPrintWriterを作成しています。

public static PrintWriter createPrintWriter(OutputStreamWriter out, boolean autoflush) { 
    Properties props = System.getProperties(); 
    synchronized (props) { 
     Object old = null; 
     try { 
      old = props.setProperty("line.separator", "\n"); 
      return new PrintWriter(out, autoflush); 
     } finally { 
      if (old != null) { 
       props.put("line.separator", old); 
      } 
     } 
    } 
} 
+0

警告。 ganymedeやssh、unixセッションなどで作業するのはややこしいことですが、本当にすべてを知る必要があります。 – KarlP

関連する問題