2013-06-05 6 views
1

Я использую библиотеку sshj для java.Автоматически закрыть и отключить сеанс java sshj

Мне нужно открыть сеанс ssh на удаленном сервере, выполнить команду, которая может работать в течение нескольких минут, а затем продолжить выполнение в моем java-коде. Когда команда, запущенная на удаленном сервере, будет завершена, я хотел бы закрыть сессию ssh и отключить sshclient.

Я видел следующий код:

public class Exec { 
    public static void main(String... args) throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     ssh.loadKnownHosts(); 

     ssh.connect("localhost"); 
     try { 
      ssh.authPublickey(System.getProperty("user.name")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 
} 

В принципе, я не хочу ждать команды до конца (не cmd.join вызова) и мне нужно session.close() и ssh.disconnect() будет вызываться автоматически после того, как команда вышла. Это возможно?

ответ

1

Возможно, я не могу точно ответить на мой вопрос, но, возможно, предоставить помощь другим, которые пытаются сделать что-то похожее на то, что я делаю. Когда я отправлял сообщение, у меня создалось впечатление, что сеанс ssh должен оставаться открытым для завершения команды, но я не думаю, что это так.

Итак, что я пытался сделать, это запустить удаленный сеанс ssh через java и запустить сценарий оболочки на удаленной машине. Скрипт оболочки может занять до 10-15 минут. Я проверил короткий тайм-аут (5 секунд), и сценарий продолжал работать после того, как сеанс был отключен ... это то, что я хотел.

Смежные вопросы