![ssh 조건이 완료되지 않고 while 루프를 종료하는 경우 [중복]](https://linux55.com/image/101739/ssh%20%EC%A1%B0%EA%B1%B4%EC%9D%B4%20%EC%99%84%EB%A3%8C%EB%90%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20while%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%EC%A2%85%EB%A3%8C%ED%95%98%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20%5B%EC%A4%91%EB%B3%B5%5D.png)
AIX에는 os_init.d 디렉토리에서 모든 호스트를 읽고 Ipv4 IP를 수집하여 파일에 저장하는 스크립트가 있습니다. 그런 다음 이 파일은 SSH를 통해 각 호스트에 연결하여 다른 스크립트를 통해 다양한 데이터를 수집하는 데 사용됩니다(여기서는 관련 없음).
- 호스트에 연결할 수 없고 IPv4 IP 주소가 있는 경우 --> 루프가 계속되는 동안 오류 없음
- 호스트에 연결할 수 없고 IPv6 IP 주소가 있는 경우 --> 루프가 계속되는 동안 오류 없음
- 호스트에 연결할 수 있고 IPv6 IP 주소가 있는 경우 --> while 루프는 계속되지만 루프를 거치지 않고 존재합니다.
마지막 조건에서 도달 가능한 IPv6 호스트에 대한 if 조건을 성공적으로 실행한 후 while 루프가 계속되지 않고 종료되는 이유를 알 수 없는 것 같습니다.
#!/usr/bin/bash
# Sumit Das 2016 12 26
# Find All PHYsical HOSTs and their IP in a cluster
#set -x
#cd /home/users/in10c2/moni
ls -1 /cAppCom/os_init.d | grep dcpaix > listPHYSERV
FN='listPHYSERV'
rm listPHYIP 2> /dev/null
while read LINE
do
PHYHOST=$LINE
PHYHOSTIP=`ping -c 1 $LINE | grep PING | awk '{print $3}' | cut -c2- | rev | cut -c3- | rev`
IPV6IPchk=`echo $PHYHOSTIP | cut -c -4`
if [ $IPV6IPchk = "2a00" ]
then
ssh -q -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no $LINE ifconfig -a > IFCNF
PHYHOSTIP=`awk '/en2:/{x=NR+1;next}(NR<=x){print}' IFCNF | awk '{print $2}'`
rm IFCNF
fi
echo "$PHYHOST,$PHYHOSTIP" >> listPHYIP
done < $FN
cat listPHYIP
cp ALL_PHY_HOSTIP_`uname -n`.txt
답변1
그렇지 ssh -n
않으면 성공 ssh
하면 표준 입력이 소비되고 while
루프에는 읽을 내용이 없습니다.