Java-Bibliothek zum Ausführen mehrerer nicht verwandter Befehle auf einem Remote-Server über ssh

Meine Java-Anwendung muss so funktionieren:

Der Benutzer wählt Bash-Befehle in der Benutzeroberfläche aus und drückt auf "Senden".Die Anwendung gibt für jeden Befehl unterschiedliche und unabhängige Antworten zurück (z. B. könnten wir sie in verschiedenen Dateien speichern).Befehle werden jeweils interaktiv ausgeführt, nicht in einem Stapel (es kann nicht so etwas wie "ls \ n pwd \ n" usw. sein)Nach jedem Befehl prüft die Anwendung, ob die Ergebnisse in Ordnung sind. In diesem Fall wird der nächste Befehl gesendet.Wir müssen ausführensu <user> auf dem Remote-Host.

Dies wird ein Plugin für eine größere App sein, daher helfen Antworten wie "etwas anderes ausprobieren" (d. H. RPC, Webdienste) mir nicht :(

Soweit ich weiß, muss ich SHELL verwenden oder zumindest den Kanal in Verbindung halten.

Ich habe jsch, sshj und ethz.ssh2 getestet, aber mit schlechten Ergebnissen.

Ich habe durch Stackoverflow-Antworten auf Fragen wie "Senden von Befehlen an Server über JSCH-Shell-Channel" usw. gegraben. Sie konzentrieren sich jedoch alle auf das Senden ganzer Befehle in einer Zeile. Ich benötige eine interaktive, dauerhafte SSH-Sitzung.

Ich habe ExpectJ verwendet (mit einem kleinen Hack des Ausgabestreams). Es hat Punkte 1,3,4,5 gelöst.

Aber Es gibt ein Problem mit Punkt 2. In meiner App muss ich eine getrennte Antwort bekommen. Aber wir werden ihre Länge nicht kennen. Eingabeaufforderungen können unterschiedlich sein. Weiß jemand, wie man ExpectJ "hackt", damit es mehr synchronisiert wird? Ich suche nach so etwas:senden, auf vollständige Antwort warten, senden, warten ... Ich habe einige grundlegende Synchronisationstricks ausprobiert, aber dies führt in der Regel zu Zeitüberschreitungen und Verbindungsverlust.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage