私のサーバーへのリバースSSH接続を作成してリモートでSSH経由で管理できるリモートデバイスがいくつかあります。彼らはカスタムポートを介して私に再接続されます。サーバーでタスクを実行すると、現在接続されているnetstat -an | grep 127.0.0.0.1:
デバイスのリストが表示されます。出力は次のとおりです。
tcp 0 0 127.0.0.1:6001 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6002 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6003 0.0.0.0:* LISTEN
ここで、600xはデバイスが接続されているポートです。私の問題はこれです。現在接続されているデバイスを表示しているサーバーで実行できるスクリプトを作成したいと思います。私のスクリプトが読み取ることができ、次のように自分のデバイスを一覧表示する設定ファイルが必要です。
NORTH:6001
SOUTH:6002
EAST:6003
WEST:6004
スクリプトはコマンドの出力を解析し、netstat
出力は次のようになります。
利用できるリンク: 北、南、東
非アクティブ接続:WEST
あまりにも混乱しないことを願っています。 grepやawkでできることですか?
答え1
以下は3段階です。
netstatからアクティブポート名を抽出します。
netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}'
awk
スペースとコロンのセットを区切り文字として指定し、ポートIDのみを選択します。
device_list.txt
grepと手順1のコマンド出力をパターンとして使用して、デバイスリストファイル(名前付き)でこれらのポートを比較します。netstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -f - device_list.txt
これは次のような出力を提供します
NORTH:6001
SOUTH:6002
EAST:6003
-v
grep aを使用して非アクティブ接続を取得できますnetstat -an | grep 127.0.0.1: | awk -F "[ :]+" '{print $5}' | grep -v -f - device_list.txt
これの出力は次のとおりです。
WEST:6004
その後、上記の内容を中心にスクリプトを作成して目的の形式で印刷できます。