【发布时间】:2019-05-17 01:27:04
【问题描述】:
我正在使用 SSH Ganymed 库别名 Trilead 别名 Orion。
我正在尝试了解会话的确切行为,因为我需要长时间(可能永远)保持 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();
并且,在线程休眠的那 30 秒内,我断开网络接口以模拟网络问题。
1)connectionMonitor不拦截disconnect事件,不打印Connection Lost消息 2)当
Session sess = conn.openSession();
被执行,进程阻塞并且没有任何反应,直到我不再连接网络接口。 这是因为,查看 Ganymed 代码,似乎由于未检测到断开连接事件,会话已打开,并且在会话成功之前打开了一个锁。
所以我的问题是: 1)这种行为是想要的还是一个错误? 2)有什么办法可以在Connection.openSession()方法和Connection.connect()方法中设置超时时间?
提前致谢。
【问题讨论】: