BatchMode옵션과 출력 "파싱"의 조합으로이를 수행 할 수 있습니다 . ( ssh어떤 이유로 든 연결에 실패하면 항상 255를 리턴하므로 리턴 코드를 사용하여 실패 유형을 구별 할 수 없습니다.)
켜져 있으면 BatchMode암호 프롬프트 나 다른 상호 작용이 시도되지 않으므로 암호가 필요한 연결이 실패합니다. (또한 ConnectTimeout필요에 맞게 조정해야하는 파일 도 넣었습니다 . 실제로 잘못된 파일 이름을 선택했습니다.)
#! /bin/bash
rm good no_auth other
while read ip host ; do
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
case $status in
ok) echo $ip $host >> good ;;
*"Permission denied"*) echo $ip $host $status >> no_auth ;;
*) echo $ip $host $status >> other ;;
esac
done < list.txt
보다 자세한 분류가 필요한 경우 다른 유형의 오류 (예 : 누락 된 서버 공개 키)를 감지 할 수 있습니다. 하나의 정렬 된 파일로 결과가 필요한 경우 cat다양한 출력 파일이 함께 표시됩니다.