netstat を使用した SSH 接続のみ Grepping

netstat を使用した SSH 接続のみ Grepping

.bashrcログインするたびにアクティブなSSH接続を表示できるようにいくつかのコマンドを追加しました。ただし、同様のポート番号には「223346」などの「22」が含まれているため、SSH接続のみが表示されない場合があります。

実行するコマンドは次のとおりです。

netstat -tan | grep ":22\|ssh" | grep -v "LISTEN" | awk '{print "     "$4" -> "$5"      "$6}'

時には次のように出力されます。

192.168.1.75:52623 -> 213.174.2.30:22650   SYN_SENT
192.168.1.75:22 -> 192.168.1.109:60561     ESTABLISHED

grepを使用してSSH接続のみを表示する方法はありますか?ありがとうございます!

答え1

Linuxの場合、マニュアルページにss正確な例を示します。

ss -o state established '( dport = :ssh or sport = :ssh )'

また、見ることができます

lsof -i tcp:22

または:

lsof -i :53

(tcpまたは他の転送プロトコル)

ただし、lsofスーパーユーザーでない場合は、所有していないプロセスに関する情報は表示されません。

答え2

私はこのテストを通してアクセスします:

  • 確立された接続と
  • のいずれかを含む着信(フィールド3のポートは22です。)国を離れる:(フィールド4のポートは22です。)接続 - フィールドの終わりと間に固定されます$

含めるようにロジックを調整できます。誰でも入ったり出たりすること、それがあなたが追求するものならば。

netstatのフラグを使用している場合は、-n「ssh」を検索する必要はありません。 IPを確認しようとしたときにポートだけを数字で指定するように要求し、netstatフラグ--numeric-portsも削除しました。-a「LISTEN」行をフィルタリングします(他のエンドポイントに接続されていないため)。設定された接続のみを印刷するので、出力からフィールド6(「ESTABLISHED」)も削除しました。これは静的でも動的でも簡単に再追加できます。

netstat -n | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'

または

netstat --numeric-ports | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'

関連情報