gpt4 book ai didi

Java Ganymed Trlead Orion ssh session 超时

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:48 26 4
gpt4 key购买 nike

我正在使用 SSH Ganymed 库别名 Trilead 别名 Orion。

我试图了解 session 的确切行为,因为我需要长时间(可能永远)保持 ssh 连接打开,并在我的 jvm 出现故障或类似情况时关闭它。

所以,我的问题是这样的。假设我做这样的事情:

Connection conn = new Connection(this.hostName, this.port);
conn.addConnectionMonitor(new ConnectionMonitor()
{
@Override
public void connectionLost(Throwable reason)
{
System.out.println("Connection Lost " reason.getMessage());
}
});
conn.connect(null, 1000, 20000);
conn.authenticateWithPublicKey(this.user, keyfile, this.password);
Thread.sleep(30000); //sleep the Thread for 30 seconds
Session sess = conn.openSession();
sess.execCommand("ls");
conn.close();

并且,在线程 hibernate 的那 30 秒内,我断开了网络接口(interface)以模拟网络问题。

1)断开事件没有被connectionMonitor拦截,也没有打印Connection Lost消息2)当

Session sess = conn.openSession();

被执行,进程阻塞并且什么都不会发生,直到我不再连接网络接口(interface)。这是因为,查看 Ganymed 代码,似乎由于未检测到断开连接事件, session 已打开,并且有一个锁打开 session ,直到它成功。

所以我的问题是:1)这种行为是需要的还是一个错误?2)Connection.openSession()方法和Connection.connect()方法中有什么方法可以设置超时吗?

提前致谢。

最佳答案

我认为问题在于您无法通过拔下电缆 30 秒来模拟 ssh 断开连接。看看这个:如果您在终端上打开 ssh 连接并拔下电缆,ssh 客户端也会阻止,但会在再次插入电缆后自动重新连接。我假设您的代码也会这样做。

如果在配置的时间内客户端和服务器之间没有数据发送,您通常会断开连接,即一段时间不活动,无论电缆是否插入。默认情况下,此时间段很可能大于 30 秒。

在sshd服务器上可以配置

ClientAliveInterval

TCPKeepAlive

ClientAliveCountMax

这些参数将决定服务器在期望来自客户端的一些数据之前等待多长时间,以及他多久接受一个简单的保持 Activity 数据包而不是真实数据。在客户端可以配置

ServerAliveInterval

如果 ClientAliveInterval 小于 ServerAliveInterval - 服务器期望保持 Activity 数据包比客户端发送它们更频繁 - 您将在 ClientAliveInterval 不活动量后断开连接。有了它,您可以测试您的代码。

这些配置也是保持 ssh 连接无限期打开的关键。如果您的 ServerAliveInterval 小于 ClientAliveInterval - 客户端将比服务器期望的更频繁地发送保持 Activity 数据包 - 您的连接将无限期打开。

看这里https://www.simplified.guide/ssh/disable-timeout

我认为重新启动服务器或客户端计算机仍会导致断开连接。如果您的客户端计算机重新启动,您无论如何都需要再次运行整个代码,如果服务器计算机重新启动,连接监视器将启动并可以重新连接。

关于Java Ganymed Trlead Orion ssh session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com