是什么导致 ch.ethz.ssh2.Connection 有一个挂起时间?
What causes ch.ethz.ssh2.Connection to have a hang time?
我目前正在使用 ch.ethz.ssh2.Connection 连接到我在 java 的服务器。有时它会挂在一台服务器上。(可能需要 10-15 秒)。我想知道导致此挂起时间的原因以及如何避免它。
连接示例
conn = new ch.ethz.ssh2.Connection(serverName);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(user, pass);
logger.info("Connecting to " + server);
if (isAuthenticated == false) {
logger.info(server + " Please check credentials");
}
sess = conn.openSession();
// I am connecting to over 200 servers and closing them. What would be the best practice to loop thru all these servers in the minimal time.
//some servers quickly connects, while some takes some time.
why does this happen?
主要问题是:是代码问题,网络问题还是服务器问题。
可以调试代码问题 - 不幸的是 ch.ethz.ssh2.Connection
没有任何日志记录的可能性来检测内部发生的事情。
也许您应该考虑切换 ssh 库(或使用它对有问题的服务器进行一些测试)。根据我的经验,sshj 非常有用。
如果是网络问题或服务器问题,您可以通过Wireshark检查发生了什么。如果发送了网络数据包但响应延迟,则问题不是使用的客户端代码。
我的 psychic debugging powers 告诉我服务器正在对每个连接的客户端的 IP 地址进行 DNS 查找。这些 DNS 查找要么需要很长时间才能完成,要么完全失败。 DNS 查找将阻止身份验证过程,直到它完成为止,无论成功与否。
如果服务器是the OpenSSH server, this behavior is controlled by the sshd config"UseDNS"选项。
我目前正在使用 ch.ethz.ssh2.Connection 连接到我在 java 的服务器。有时它会挂在一台服务器上。(可能需要 10-15 秒)。我想知道导致此挂起时间的原因以及如何避免它。
连接示例
conn = new ch.ethz.ssh2.Connection(serverName);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(user, pass);
logger.info("Connecting to " + server);
if (isAuthenticated == false) {
logger.info(server + " Please check credentials");
}
sess = conn.openSession();
// I am connecting to over 200 servers and closing them. What would be the best practice to loop thru all these servers in the minimal time.
//some servers quickly connects, while some takes some time.
why does this happen?
主要问题是:是代码问题,网络问题还是服务器问题。
可以调试代码问题 - 不幸的是 ch.ethz.ssh2.Connection
没有任何日志记录的可能性来检测内部发生的事情。
也许您应该考虑切换 ssh 库(或使用它对有问题的服务器进行一些测试)。根据我的经验,sshj 非常有用。
如果是网络问题或服务器问题,您可以通过Wireshark检查发生了什么。如果发送了网络数据包但响应延迟,则问题不是使用的客户端代码。
我的 psychic debugging powers 告诉我服务器正在对每个连接的客户端的 IP 地址进行 DNS 查找。这些 DNS 查找要么需要很长时间才能完成,要么完全失败。 DNS 查找将阻止身份验证过程,直到它完成为止,无论成功与否。
如果服务器是the OpenSSH server, this behavior is controlled by the sshd config"UseDNS"选项。