2014-09-19 2 views
0

Я пытаюсь запустить программу Java для вывода команд на удаленную (Linux) машину. Я могу запустить putty.exe, а затем подключиться к машине с помощью SSH-ключей. Но я не могу запускать реальные команды, такие как «bash» «ps-ef» или «ls -la». В настоящее время с использованием Java runtime.exec, не уверены, поможет ли использование java.lang.ProcessBuilder? Что я делаю не так ? Любая помощь/руководство было бы весьма признателен .. Спасибо заранееJava-программа для запуска команд оболочки из Windows-машины

package hello; 

import java.io.*; 
public class RuntimeExample { 




    public static void main(String args[]) throws IOException { 



    try{  


    Runtime runtime = Runtime.getRuntime(); 
    Process process = runtime.exec(new String[]{"C:\\Users\\yky90455\\Desktop\\putty.exe","[email protected]","bash", "ps -ef"}); 


    InputStream is = process.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
    String line; 

    System.out.printf("Output of running the command is:"); 

    while ((line = br.readLine()) != null) { 
     System.out.println(line); 

     }                

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

} 
+5

Почему вы не используете для этого SSH-библиотеку вместо использования шпатлевки? – BackSlash

+1

Весь смысл Java - абстрактная _away от ОС. Всегда ищите независимую от платформы альтернативу, прежде чем прибегать к вызовам собственных команд. В вашем примере просто используйте реализацию SSH для Java - например, [sshj] (https://github.com/hierynomus/sshj). –

+0

Спасибо за ваш быстрый ответ. Я проверю sshj и Jsch. –

ответ

2

попробовать JSch From here получить scrips оболочки, выполненные из Java в некоторой удаленной машине Linux. Я работал над этим, и это было действительно забавно. Хотя вы можете найти небольшой недостаток документов для понимания этого, но вы можете легко преодолеть это.

+0

Спасибо за ваш быстрый ответ. Я проверю sshj и Jsch. –

+0

@joule_wonder: Welcome.But обязательно отметьте этот ответ, если вы зайдете на Jsch :) –

0

Спасибо за все ваши ответы. Я попробовал библиотеку Ganymed SSH-2. Он хорошо работает для основных команд на удаленной машине. Мне придется исследовать другие API в случае, если я столкнулся с любыми ограничениями с SSH-2.

-1
public class triggerPutty { 
    public static void main(String[] a) { 
     try { 
      String command = "putty.exe [email protected] -pw password -m C:\\containing_comman.txt"; 
      Runtime r = Runtime.getRuntime(); 
      Process p = null; 
      p = r.exec(command); 
      p.waitFor(); 
      p.destroy(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }  
    } 
} 

-m помогает выполнить вашу команду из этого файла.
Вы можете сохранить N количество команд в этом файле. ## Heading ##

+0

Пожалуйста, используйте этот код для своего вопроса –

+0

Рассмотрите возможность улучшения ответа. [Только для кода ответы могут подпадать под «Очень низкое качество» ... и являются кандидатами на удаление ... Мы всегда говорили, что мы не фабрика кода. Мы - люди, которые учат других ловить рыбу. Только для кода отвечает только на человека за день] (http://meta.stackexchange.com/questions/148272/is-there-any-benefit-to-allowing-code-only-answers-while-blocking-code -Ques использующих только) – JNYRanger