최근에는 Jump Host를 활성화하여 모든 장치와 상호 작용할 수 있었습니다. 6.x는 빨간색이며 루트 액세스 권한이 없습니다. Autoexpect 및 bash에서만 스크립트를 작성할 수 있으며 모듈은 불가능합니다.
출처: 5000개의 장치가 있습니다(줄당 1개, 매개변수당 3개 - 위치 호스트 이름 IP - 탭으로 구분됨).
작업: 각 위치(ARGV1)에서 모든 장치를 검색하고(5000으로 가정, 40은 위치를 나타냄) 출력을 임시 파일로 리디렉션하고(출력 없음, 에코 꺼짐) 임시 디렉터리의 각 장치에 대해 명령을 실행합니다. 출력은 IP가 아닌 HostName ARGV2여야 합니다.
tmp에서 각 장치를 ping하고 각 호스트에 대해 성공을 반환하거나 각 장치에 로그인하고 명령을 실행하고 호스트 결과를 인쇄하고 tmp 파일의 다음 항목으로 이동한다고 말합니다.
입력 파일 구조의 예:
AA Torp1 1.1.1.1
AA Torp2 2.2.2.2
BB Torp97 9.9.9.9
AA 위치에서 각 장치에 ping을 실행한다고 가정해 보겠습니다. cat hosts.txt | grep AA
예를 들어 tmp 스크립트를 작성한 다음 각 IP를 ping하는 방법의 출력은 다음과 같습니다 1.1.1.1
.2.2.2.2
핑이 성공하면 Torp1 OK 핑이 실패하면 Torp2 NOK
기본적인 예... 또는 위치 기반 각 IP에 대해 ssh grep 명령 출력을 실행한 다음 tmp 파일을 삭제합니다.
답변1
이를 수행하는 쉬운 방법은 while read
루프를 사용하는 것입니다. 일반적인 형식은 다음과 같습니다.
while read var1 var2 ... varN; do something; done < inputFile
기본적으로 각 입력 줄은 공백으로 분할되므로 기본적으로 다음이 이미 필요한 것입니다.
while read location hostname ip; do
printf "Ping of $hostname ($ip): "
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done < ips.txt
또는 특정 위치로 제한합니다.
grep location ips.txt | while read location hostname ip; do
printf "Ping of $hostname ($ip): "
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done
이 파일로 테스트하면:
location1 example.com 93.184.216.34
location2 google.com 8.8.8.8
location1 bad.com 123.456.7.8
우리는 다음을 얻었습니다:
$ grep -w "^$location" ips.txt |
while read location hostname ip; do
printf "Ping of $hostname ($ip): ";
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED";
done
Ping of example.com (93.184.216.34): OK
Ping of bad.com (123.456.7.8): FAILED