Получение исключения при подключении сервера через SSH - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь подключиться к внешнему серверу с моего сервера Solaris, используя SSH в моем приложении Java. Некоторые, как мы получаем исключение при аутентификации пользователя, но через 60 минут. Как мы можем уменьшить время, чтобы получить исключение до 5 минут или около того.

Возникла проблема при подключении к IP: PORT. Java.io.IOException: Возникла проблема при подключении к IP: PORT.

Разница во времени между временем2 и временем3 составляет около 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 имеет значение 3600 с. Это полезно для решения этой проблемы. Каким может быть результат, если я уменьшу его значение до 30 или 5 минут.

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Попробуйте установить «kexTimeout» (Тайм-аут для полного установления соединения (неотрицательный, в миллисекундах). Ноль означает отсутствие тайм-аута). полная трассировка стека, чтобы проверить, где происходит тайм-аут

catch (Exception t) {
    //time3
    t.printStackTrace();
}
1 голос
/ 11 ноября 2019

Позвольте мне обобщить вашу проблему, пожалуйста, исправьте меня, если что-то не так.

  1. Невозможно подключиться к SSH-серверу.
  2. Исключение, возникшее через 60 минут.

В соответствии с приведенным ниже разделом Throws метода connect (ServerHostKeyVerifier, int, int) , я думаю, вы можете столкнуться с проблемой из-за ошибочного прокси, который не возвращает правильный HTTP-ответ. Использование прямого подключения к Интернету, чтобы увидеть, исчезла ли проблема.

Броски:

java.io.IOException - Если возникает какая-либо проблема, например, на сервереключ хоста не принят верификатором или возникла проблема во время первоначальной настройки шифрования (например, неверная подпись, отправленная сервером).

В случае тайм-аута (либо connectTimeout, либо kexTimeout) исключение SocketTimeoutExceptionБрошенный.

Исключение также может быть сгенерировано, если соединение уже было успешно установлено (независимо от того, было ли соединение разорвано за это время), и вы снова вызываете connect (), не вызвав close () first.

Если используется прокси-сервер HTTP и прокси-сервер отклоняет соединение, то может быть выдано исключение HTTPProxyException , которое содержит сведения, возвращаемые прокси-сервером. Если прокси глючит и не возвращает правильный HTTP-ответ, вместо этого выдается нормальное IOException.

...