SSH의 시간 길이를 설정하고 오류 메시지를 리디렉션하는 방법

SSH의 시간 길이를 설정하고 오류 메시지를 리디렉션하는 방법

호스트 목록이 있고 여러 호스트가 있습니다. 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"

그건:

  1. 올바른 인용문을 사용하세요. timeout `ssh …`여기서는 작동할 수 없습니다. "'ssh' 실행, 출력 캡처,그 다음에출력을 'timeout'으로 지정하십시오."

  2. ssh를 "배치" 모드로 실행합니다. 즉, 실행 명령을 내립니다. 이것이 없으면 ssh는 대화형 모드로 실행되며 연결이 성공하더라도 영원히 정지됩니다.

다음을 시도해 볼 수도 있습니다.

ssh -o ConnectTimeout=5s $line true

답변2

ssh에는 -o추가 옵션을 제공할 수 있는 스위치가 있습니다. 여기서 특히 사용되는 ConnectTimeout옵션은 초 단위로 지정된 인수를 취하는 옵션입니다.

ssh -o ConnectTimeout=5 123.123.123.123

또한, ConnectionAttempts귀하에게도 유용할 수 있습니다.

관련 정보