2015-03-25 3 views
0

Я использую однопоточное приложение для подключения моего клиентского сервера Architecture. В основном это приложение создаст много подключений & автоматически закрывает его после завершения задания. Мы получаем исключениеJ2ssh ssh клиент отключен часто

«com.sshtools.j2ssh.transport.TransportProtocolException: Соединение не завершен»

Мы включили журналы j2ssh, чтобы выяснить причину проблемы. Ниже приведены полные сведения об этой проблеме.

Java Версия: jdk1.6.0_11

API Использована J2SSH Ядро 0.2.9 (j2ssh-ядро-0.2.9.jar)

com.sshtools.j2ssh.transport.TransportProtocolException: The connection did not complete 
    at com.sshtools.j2ssh.transport.TransportProtocolClient.onStartTransportProtocol(Unknown Source) 
    at com.sshtools.j2ssh.transport.TransportProtocolCommon.startTransportProtocol(Unknown Source) 
    at com.sshtools.j2ssh.SshClient.connect(Unknown Source) 
    at com.sshtools.j2ssh.SshClient.connect(Unknown Source) 
    at com.sshtools.j2ssh.SshClient.connect(Unknown Source) 
    at info.itserv.globalinterface.gui.SFTP.openSSH(SFTP.java:95) 
    at info.itserv.globalinterface.gui.SFTP.connectionSFTP(SFTP.java:228) 

........ и следующий код

public void openSSH(String hostname, int authCode) { 
     try { 

      sshClient.connect(hostname, 
           new IgnoreHostKeyVerification()); 
      sshClient.getConnectionProperties().setPort(this.port); 
      //Authenticate 
      GENERAL.println("Processing logging..."); 
      switch (authCode) { 
      case 0: 
       this.login(this.username, this.password); 
       System.out.println("Password authentication"); 
       break; 
      case 1: 

       //String keyFilename = "D:\\Cygwin\\home\\gtantot\\id_dsa"; 
       this.loginCertificat(this.username, this.keyFilename, 
            this.passphrase); 
       System.out.println("Password authentication"); 
       break; 
      default: 
       System.out.println("ECHEC SSH connection"); 
       break; 
      } 
      this.sftp = sshClient.openSftpClient(); 

     } catch (TransportProtocolException e) { 
      System.out.println("Transport: "+e.getMessage().toString()); 

      e.printStackTrace(); 

     } 
     catch (IOException e1) { 
      System.out.println("Error openSSH: "+e1.getMessage()); 
      e1.printStackTrace(); 

     } } 

    public void closeSSH() { 
     if (sshClient != null) { 
      sshClient.disconnect(); 
     } 
    } 

Есть ли способ преодолеть эту ошибку? Как эта ошибка приведет к сбою одного сеанса sftp приложения до , каково решение для этого?

+0

Java SE 6 Update 11 дата выхода == 2008-12-03, j2ssh дата выхода 19 мая 2009 - время для чего-то нового? –

+0

попробуйте использовать jsch, он отлично работает –

+0

Спасибо, что предложили Wombat ..) Я также попытался обновить Java 7. Но та же проблема возникает. Если нет способа, мне нужно попробовать только для jsch. –

ответ

2

Если вы отправили полный журнал, должно быть больше выходных данных, вы включили регистрацию до уровня DEBUG?

Ознакомившись с кодом, это исключение возникает, когда что-то пошло не так во время обмена ключами, возможно, сервер, к которому вы подключаетесь, не поддерживает ни один из алгоритмов обмена ключами, поддерживаемый старым J2SSH API.

Версия J2SSH, которую вы используете, возможно, была выпущена в 2009 году, но с 2007 года в API было добавлено мало или вообще не было работы, когда автор оригинала отказался от участия. Многие серверы теперь отключают более старые, менее безопасные обмены ключами и, скорее всего, что-то вроде этого, что вызывает проблему.

Если вы хотите продолжить использовать J2SSH, как API, а не JSch, вы можете использовать версию J2SSH Maverick с открытым исходным кодом, которая принадлежит тому же автору, что и J2SSH (это я кстати).

https://github.com/sshtools/j2ssh-maverick

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