ssh が停止したときに ssh によって生成された tcpdump プロセスを強制終了します。

ssh が停止したときに ssh によって生成された tcpdump プロセスを強制終了します。

私たちは UNIX でリモート キャプチャを行っていますtcpdump。SSH が強制終了されるたびに (Ctrl + C などの割り込みによって)、tcpdumpもう一方の端を停止/強制終了する必要があります。

ssh が強制終了されたときに SSH によって生成されたプロセスを強制終了するために、リストされているオプションのほとんどを試しました。tcpdump の場合、-t を使用した ssh は、先頭に予期しない行がプレフィックスとして付加されるため、実行できません。

したがって、すでにこのような問題に取り組んでいる方がいらっしゃいましたら、これを達成するための良い解決策を知りたいと思います。

私はtcpdump次のようにルートとしてリモートで実行しています:

ssh {remotehost} "tcpdump -i eth0 -s 0 -w - " > /tmp/local_file

ありがとう。

答え1

リモートで実行している場合、プロセスを強制終了するとssh、もう一方のエンドも終了します。何らかの理由でこのエンドを一時停止させている場合を除きます。その場合は、バックグラウンドでより大きなスクリプトの一部として実行することをお勧めします。

また、リモートで root を使用するべきではありません。また、ssh を実行する側で root を使用する必要もありません。可能な限り、root として作業することは避けてください。sudo権限を持つリモート ユーザーを使用してください。

tcpdumpデフォルトでは stdout に書き込まれるため、「w -」もおそらく必要ありません。

tcpdumpセッションをより適切に制御するために、キャプチャされるパケットの数を制限することもできます。システムからポート 22 を除外する必要があることに注意してくださいssh。そうしないと、リモート システムが現在のセッションを一種の自己フィード再帰方式でキャプチャします。

したがって、1000 個のパケットをキャプチャするには、次のようにします。

$ssh [email protected] "sudo tcpdump -i eth0 -s0 -c 1000 not port 22" > /tmp/local_file

もう 1 つのあまりきれいではない代替案は、その後に pkill を実行することです。

$ssh ..."sudo tcpdump"
$ssh ..."pkill tcpdump"

最後の警告として、/tmpまたはそれが常駐するルートは、多くの場合、制限されたファイルシステムまたは RAM にあります。また、特に特権ユーザーとして、/tmp ディレクトリに予測可能な名前を作成することは、セキュリティ上のリスクになります。キャプチャ ファイルに別の場所を使用することをお勧めします。

システム管理者として、のようなツールに投資することでより良い結果が得られるかもしれませんansible。リモート管理の自動化やより複雑なツールの使用については、以下を参照してください。PowerShell の「1 対多」リモート処理に相当する Linux

関連情報