
호스트 목록이 있고 여러 호스트가 있습니다. SSH를 사용하여 연결하고 싶습니다. SSH에 걸리는 시간만큼 호스트가 사용 가능한지 여부를 확인하고 싶습니다. 5초 이상 걸리는 경우(사용할 수 없음을 의미) 그런 다음 중지하고 다음 호스트로 ssh를 수행하십시오. 호스트를 사용할 수 있게 되면 호스트 이름을 출력합니다. 이전에 nmap을 사용했지만 IT 보안 담당자는 이를 캠퍼스 데스크톱에 설치할 수 없다고 말했습니다.
HOSTS=`cat $host_list`
for line in $HOSTS
do
ssh -o ConnectTimeout=5s $line true >> /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]
then
echo $line > succeed.txt
else
echo $line > fail.txt
fi
done
위의 스크립트가 내가 할 수 있는 전부입니다. 문제는 실패했을 때 오류 메시지를 리디렉션하고 싶다는 것입니다
ssh: connect to host c28-0112-05.ad.mtu.edu port 22: No route to host
. 하지만 여전히 오류 메시지가 나타납니다.
답변1
충분히 가까운:
timeout -5s "ssh $line true"
그건:
올바른 인용문을 사용하세요.
timeout `ssh …`
여기서는 작동할 수 없습니다. "'ssh' 실행, 출력 캡처,그 다음에출력을 'timeout'으로 지정하십시오."ssh를 "배치" 모드로 실행합니다. 즉, 실행 명령을 내립니다. 이것이 없으면 ssh는 대화형 모드로 실행되며 연결이 성공하더라도 영원히 정지됩니다.
다음을 시도해 볼 수도 있습니다.
ssh -o ConnectTimeout=5s $line true
답변2
ssh에는 -o
추가 옵션을 제공할 수 있는 스위치가 있습니다. 여기서 특히 사용되는 ConnectTimeout
옵션은 초 단위로 지정된 인수를 취하는 옵션입니다.
ssh -o ConnectTimeout=5 123.123.123.123
또한, ConnectionAttempts
귀하에게도 유용할 수 있습니다.