簡體   English   中英

通過 SSH 連接服務器時出現異常

[英]Getting exception while connecting a server through SSH

我正在嘗試在我的 Java 應用程序中使用 SSH 從我的 Solaris 服務器連接到外部服務器。 一些我們在驗證用戶但在 60 分鍾后遇到異常的方式。 我們如何才能將獲得異常的時間縮短到 5 分鍾左右。

There was a problem while connecting to IP:PORT java.io.IOException: There was a problem while connecting to IP:PORT

time2 和 time3 之間的時間差在 60 分鍾左右。 我想減少這個時間。

請在下面找到我們正在使用的代碼片段。

try
{
    timeout = 1;
    if (connection == null)
    {
        //time1
        connection = new ch.ethz.ssh2.Connection(getIpAddress(), Integer.parseInt(getPort()));
        if (connection == null)
        {
            System.out.println("connection is null");
        }
        else
        {
            //time2
            connection.connect(null, timeout, 0);
        }
    }
}
catch (Exception t)
{
    //time3
    System.out.println(t.getLocalizedMessage());
    System.out.println(t.toString());
}

Edit1:檢查SSH相關配置文件后,我發現KeyRegenerationInterval的值為3600s。 這對解決這個問題有用嗎。 如果我將其值降低到大約 30 分鍾或 5 分鍾,可能會產生什么結果。

讓我總結一下你的問題,如果有問題請糾正我。

  1. 您無法連接到 SSH 服務器。
  2. 60 分鍾后引發異常。

根據下面的方法connect(ServerHostKeyVerifier, int, int)的 Throws 部分,我猜你可能會因為一個錯誤的代理而面臨問題,它沒有返回正確的 HTTP 響應。 使用直接互聯網連接來查看問題是否消失。

拋出:

java.io.IOException - 如果出現任何問題,例如,驗證者不接受服務器的主機密鑰或在初始加密設置期間出現問題(例如,服務器發送的簽名錯誤)。

如果發生超時(connectTimeout 或 kexTimeout),則會引發 SocketTimeoutException。

如果連接已經成功連接(無論連接是否同時中斷)並且您在沒有先調用close()的情況下再次調用 connect() ,也可能會引發異常。

如果正在使用 HTTP 代理並且代理拒絕連接,則可能會拋出HTTPProxyException ,其中包含代理返回的詳細信息。 如果代理有問題並且沒有返回正確的 HTTP 響應,則改為拋出正常的 IOException。

嘗試將“kexTimeout”(完全連接建立超時(非負數,以毫秒為單位)。零表示沒有超時。)為非零

connection.connect(null, timeout, timeout);

此外,在您的捕獲中打印完整的堆棧跟蹤以驗證超時發生的位置

catch (Exception t) {
    //time3
    t.printStackTrace();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM