2017-04-21 2 views
0

A) 알려진 IP 주소로 성공적으로 로그인하려고 시도하고 IP 주소가 성공적으로 목록에 호스트가 추가 된 경우 IP 목록을 차례로 순환하는 스크립트를 만들려고합니다. 동작이 반복되지 않습니다.ssh로 중첩 된 If 문

이 스크립트는 A) 호스트에서 ping을 사용할 수 없거나 사용 가능하고 알려진 자격 증명이 작동하는 경우 B) 예상대로 실행됩니다. 호스트에 ping을 할 수 있지만 ssh 연결이 거부되면 다음 변수 (또는 IP) 대신 스크립트가 종료됩니다. 감사! 내가 지금까지 무엇을 가지고

:

while read p; do 
    ping -c1 -t1 $p 
    if [ $? -eq 0 ] 
    then 
    /usr/local/bin/sshpass -p $PW ssh -o StrictHostKeyChecking=no "$USR"@"$p" </dev/null " 
    scutil --get ComputerName" | tee -ai $WORKING 

    MACHINE=$(head -n 1 $WORKING) 

    if grep -Fxq $MACHINE "$FULL" 
    then 
     echo $MACHINE has been worked on already 

    else 
     echo $MACHINE has not been worked on 
     echo $MACHINE >> $FULL 
     rm -rf $WORKING 
    fi 

    else 
    echo ping fail 
    fi 
done </iprange.txt 
+0

그럼 뭐가 문제입니까? – 123

+0

ssh 연결이 거부되었을 때 다음 변수로 순환되지 않는 이유는 무엇입니까? 중첩 된 if 루프를 제거하면 예상대로 작동합니다. – Havens

+0

"if 루프"란 무엇입니까? 오, 그리고 [mcve]를 게시하십시오. 당신은 최소한의 예가 아닙니다. – Heinzi

답변

1

나는 문제가 무엇인지 전혀 모르겠어요,하지만 ssh 명령은 아마 당신의 while read 루프에서 STDIN을 먹는 것 같습니다.

read 명령에서 읽고 FD 변화하려고 다음 중 하나를

while read -u 9 -r p ; do 
    echo "$p" 
done 9< /iprange.txt 

또는 /dev/null에서 STDIN을 리디렉션하여 ssh 명령에 -n 인수를 사용해보십시오 (/iprange.txt에서 STDIN의 읽기 방지).