sshjを使用してリモートマシンに接続し、さまざまな値を取得しています。sshjで理解しているように、次のコードを実行してリモートマシンのホスト名を取得すると、次のようになります。
SSHClient sshClient = new SSHClient();
Session session = sshClient.startSession();
Command commandObject = session.exec("hostname");
inputstreamを取得することで戻り値を取得できることを知っています
session.getInputStream();
私が抱えていると思われる問題は、セッションオブジェクト(およびコマンド)が「一度使用してから使い捨て」の方法で設計されていることです。したがって、これを念頭に置いて、リソースをクリーンアップするために、セッションが終了したらセッションを閉じたいと思います。
commandObject.close();
ただし、sshjは非同期であるため、コールバック機能が組み込まれていないようであるため、入力ストリームで戻り値が利用可能になる時期を判断できません。
この問題を回避するために私が考えることができる唯一の方法は、入力ストリームを検査する前に、事前定義された期間スリープすることです。しかし、これは単なるハックのように感じます。これらすべてに対してより良い解決策があることを願っています。
誰かがsshjを使用して同様の問題を抱えていましたか?考えられる解決策はありますか?
乾杯!