동일한 비밀번호가 설정된 여러 서버의 콘텐츠를 확인하는 간단한 한 줄짜리 for 루프가 있습니다. 나는 이 라이너를 IP 주소를 통해 서버 클러스터에 로그인하고 비밀번호를 묻는 메시지를 표시하고 명령을 실행하는 스크립트로 개발하고 싶습니다. 예를 들어 서비스를 다시 시작합니다. 이것이 내가 사용하는 것입니다:
for i in {1..253}
do sshpass -p PASSWORDHERE ssh -o StrictHostKeyChecking=no [email protected].${i} 'hostname
echo "Checking if foo.log exists: `ls -lh /var/log/foo.log | wc -l`"
echo "Checking if bar.log is present: `ls -lh /var/log/bar.log | wc -l`"
' 2>/dev/null; echo ""; done
내 스크립트가 약해서 어디서부터 시작해야 할지 잘 모르겠습니다. 그건 그렇고, 나는 기본적인 도구 세트를 사용하여 이것을 달성하고 싶습니다. 타사를 설치할 수 없습니다.
도움을 주시면 감사하겠습니다.
답변1
for i in {1..253}
do
ip=192.168.1.${i}
echo "Enter password for: $ip"
read pswd
case "$pswd" in
*) password=$pswd;;
esac
sshpass -p "$password" ssh -o StrictHostKeyChecking=no username@$ip 'hostname
echo "Checking if foo.log exists: `ls -lh /var/log/foo.log | wc -l`"
echo "Checking if bar.log is present: `ls -lh /var/log/bar.log | wc -l`"
' 2>/dev/null
done
그러면 효과가 있을 것입니다. 테스트 중에 루프 실행에 지치거나 더 작은 범위(예: 1~5)를 사용하여 디버깅하는 경우 Ctrl+C를 누르면 루프가 종료됩니다.