我正在尝试在Java应用程序中使用SSH从Solaris服务器连接到外部服务器。在60分钟后,我们如何在验证用户身份时获取异常。我们如何减少将异常发生的时间降到5分钟左右。
连接到IP:PORT时出现问题 java.io.IOException:连接到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分钟左右,将会有什么结果。
答案 0 :(得分:1)
让我总结一下您的问题,如果出现问题,请纠正我。
根据方法connect(ServerHostKeyVerifier, int, int)的“抛出”部分,我猜您可能由于错误的代理无法返回正确的HTTP响应而面临问题。使用直接Internet连接查看问题是否消失。
投掷:
java.io.IOException-如果发生任何问题,例如验证程序不接受服务器的主机密钥,或者在验证期间出现问题 初始加密设置(例如,服务器发送的签名为 错误)。
如果发生超时(connectTimeout或kexTimeout),则会抛出SocketTimeoutException。
如果连接已经成功连接,也可能引发异常(无论连接是否中断) 时间),而无需调用close()即可再次调用connect() 首先。
如果正在使用HTTP代理并且代理拒绝连接,则可能会引发HTTPProxyException,其中包含 代理返回的详细信息。如果代理有错误,但没有 返回正确的HTTP响应,然后抛出普通的IOException 代替。
答案 1 :(得分:1)
尝试将“ kexTimeout”(用于建立完整连接的超时(非负数,以毫秒为单位)。零表示无超时。)设置为非零
connection.connect(null, timeout, timeout);
此外,在您的捕获中打印完整的堆栈跟踪以验证超时发生的位置
catch (Exception t) {
//time3
t.printStackTrace();
}