5

SSHGanymedライブラリエイリアス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によって傍受されず、接続が失われたというメッセージが出力されない2)

Session sess = conn.openSession();

が実行され、プロセスがブロックされ、ネットワークインターフェイスに再度接続しない限り何も起こりません。これは、Ganymedコードを見ると、切断イベントが検出されないため、セッションが開かれ、成功するまでセッションを開くロックがあるように見えるためです。

だから私の質問は次のとおりです:1)この動作は必要ですか、それともバグですか?2)Connection.openSession()メソッドとConnection.connect()メソッドでタイムアウトを設定する方法はありますか?

前もって感謝します。

4

1 に答える 1

3

問題は、ケーブルを 30 秒間抜いても ssh の切断をシミュレートできないことだと思います。これを見てください:端末でssh接続を開いてケーブルを抜くと、sshクライアントもブロックされますが、ケーブルが再び差し込まれると自動的に再接続されます。あなたのコードも同じことをすると思います。

ケーブルが接続されているかどうかに関係なく、クライアントとサーバー間で設定された時間、つまり非アクティブな期間の間データが送信されない場合、通常は切断されます。この期間は、デフォルトで 30 秒よりも長い可能性があります。

sshdサーバーで構成できます

ClientAliveInterval

TCPキープアライブ

ClientAliveCountMax

これらのパラメーターは、サーバーがクライアントからのデータを期待するまでに待機する時間と、実際のデータではなく単純なキープアライブ パケットを受け入れる頻度を決定します。クライアントで設定できます

ServerAliveInterval

ClientAliveInterval が ServerAliveInterval よりも小さい場合 (クライアントが送信するよりも頻繁にキープアライブ パケットをサーバーが予期している場合)、ClientAliveInterval の非アクティブ時間が経過すると切断されます。これで、コードをテストできます。

これらの構成は、ssh 接続を無期限に開いたままにするための鍵でもあります。ServerAliveInterval が ClientAliveInterval よりも小さい場合 - クライアントはサーバーが期待するよりも頻繁にキープアライブ パケットを送信します - 接続は無期限に開かれます。

こちらをご覧ください https://www.simplified.guide/ssh/disable-timeout

サーバーまたはクライアント マシンを再起動しても切断されると思います。クライアント マシンを再起動する場合は、とにかくコード全体を再度実行する必要があります。サーバー マシンを再起動する場合は、接続モニターが開始され、再接続される可能性があります。

于 2013-01-05T01:05:15.190 に答える