繁体   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