[英]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 分鍾,可能會產生什么結果。
讓我總結一下你的問題,如果有問題請糾正我。
根據下面的方法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.