我正在使用 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() 方法中设置超时?
提前致谢。