/etc/hosts から複数のスイッチに接続し、複数のコマンド出力をファイルにエクスポートします。

/etc/hosts から複数のスイッチに接続し、複数のコマンド出力をファイルにエクスポートします。
  1. 実際に私が気にするのは、/etc/hostsにリストされている複数のスイッチを記録し、いくつかのコマンドをすべて実行し、出力をデフォルトのLinuxホストのログファイルに保存する方法です。
  2. 2番目の質問は、IPアドレスをスイッチ名に関連付け、それらの別々のディレクトリを作成し、各コマンドログをそこに保存する方法を尋ねることです。

タイトルを見ました: 複数のネットワークデバイスに自動的に接続し、コマンドを実行し、出力をファイルに保存する方法は?

しかし、それは私のニーズをどのように満たすのですか?

スクリプト:

#!/bin/bash
#=================================================================
#       Variables
#=================================================================
DATE=$(date +"%Y%m%d")
DIR=/logs/cisco/$DATE
INPUT=/etc/hosts
count=0
IP=$addr
#=================================================================
# Check if log directory exists
#=================================================================
if [ ! -d $DIR ]; then
    mkdir -p /logs/cisco/$DATE;
fi;
#================================================================
# Main
#================================================================
while read IP
do
sshpass -p ****** ssh admin@$IP 'sho int fa 1/1' > $DIR/int.log
done < <( sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,9999d' $INPUT | awk '{print $1}' )

ベストアンサー1

以下では、ほとんど機能するLiteバージョンのアップデートを送信しましたが、出力ファイルは空で、画面にはコマンド出力のみが表示されます。誰もが各ファイル内の出力を取得する方法を助けることができれば。

#!/bin/bash
#=================================================================
# Variables
#=================================================================
DATE=$(date +"%Y%m%d")
DIR=/logs/cisco/$DATE
INPUT=/etc/hosts
SW=$(sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,$d' $INPUT | awk '{print $2}')
#=================================================================
# Check if log directory exists
#=================================================================
if [ ! -d "$DIR" ]; then
   mkdir -p /logs/cisco/"$DATE";
fi
echo "$SW" | while IFS= read -r line
 do
  mkdir -p -- "$DIR/$line"
done <<<"$SW"
#================================================================
# Main
#================================================================
for ip in $(cat $INPUT | sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,$d' $INPUT | awk '{print $1}')
   do
   for line in $(cat $INPUT | sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,$d' $INPUT | awk '{print $2}')
   do
    sshpass -p kkk ssh admin@"$ip" 'sho int fo1/1' > "$DIR/$line"/port.log
   done
done

おすすめ記事