2015-03-25 171 views
0

我使用的是單線程應用程序連接我的客戶服務器結構。基本上這個應用程序將創建許多連接&一旦工作完成後自動關閉它。我們正在一個異常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的更新11發行日期2008-12-03 ==,J2SSH發佈日期2009年5月19日 - 時間新的東西? – 2015-03-25 06:04:59

+0

嘗試使用jsch,它奇妙地工作 – 2015-03-25 06:05:55

+0

感謝您的建議Wombat ..)我也試過更新到Java 7。但同樣的問題發生。如果沒有辦法,我只需要試試jsch .. – 2015-03-25 06:13:32

回答

2

如果您已經發布了完整的日誌應該有更多的輸出,並打開記錄多達DEBUG級別?

看着東西時,密鑰交換過程中出了問題,就會出現此異常的代碼,也許你正在連接的服務器不支持任何舊J2SSH API支持的密鑰交換算法。

您正在使用的J2SSH的版本可能已在2009年發佈,但是當原作者停止貢獻很少或根本沒有工作已自2007年以來投入的API。現在許多服務器禁用較舊的,不太安全的密鑰交換,並且可能會導致此問題。

如果你想繼續使用類似API的J2SSH而不是JSch,你可以使用與J2SSH相同的作者的J2SSH Maverick的開源版本(這是我的順便說一句)。

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