/etc/hosts에서 여러 스위치에 연결하고 여러 명령 출력을 파일로 내보냅니다.

/etc/hosts에서 여러 스위치에 연결하고 여러 명령 출력을 파일로 내보냅니다.
  1. 실제로 제가 걱정하는 것은 /etc/hosts에 나열된 여러 스위치를 기록하고 몇 가지 명령을 모두 실행하고 출력을 기본 Linux 호스트의 로그 파일에 저장하는 방법입니다.
  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

아래에서는 거의 작동하는 라이트 버전 업데이트를 보냈지만 출력 파일은 비어 있고 화면에는 명령 출력만 표시됩니다. 누구든지 각 파일 내에서 출력을 얻는 방법을 도울 수 있다면.

#!/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

관련 정보