Ich verwende den SSH Ganymed-Bibliothek Alias Trilead Alias Orion.Java Ganymed Trelead Orion SSH Session Timeout
Ich versuche, das genaue Verhalten der Sitzung zu verstehen, da ich eine SSH-Verbindung für eine lange Zeit (möglicherweise für immer) geöffnet halten müsste, und es gerade zu schließen, wenn mein jvm oder so etwas heruntergeht.
Also, mein Problem ist das. Unter der Annahme, Ich mache das so etwas wie:
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();
Und in diesen 30 Sekunden, wenn der Thread schläft, trenne ich mein Netzwerk-Interface für ein Netzwerkproblem zu emulieren.
1), um das Trennungsereignis von der connectionMonitor und die Verbindung nicht unterbrochen wird verlorene Nachrichten gedruckt werden, nicht 2) Wenn
Session sess = conn.openSession();
ausgeführt wird, geschehen die Prozessblocks und nichts, bis i verbindet nicht Du die Netzwerkschnittstelle wieder. Das liegt daran, dass beim Anzeigen des Ganymed-Codes die Sitzung geöffnet wird, da das Unterbrechungsereignis nicht erkannt wird, und es eine Sperre gibt, die die Sitzung öffnet, bis sie erfolgreich ist.
Also meine Fragen sind: 1) Ist dieses Verhalten gewünscht oder ist das ein Fehler? 2) Gibt es eine Möglichkeit, eine Zeitüberschreitung in der Connection.openSession() - Methode sowie der Connection.connect() -Methode festzulegen?
Vielen Dank im Voraus.