나는 서버 목록을 실행하고 SSH 포트가 열려 있는지 확인하는 매우 기본적인 스크립트를 만들려고 합니다 nc
. 나는 몇 가지 다른 것을 시도했지만 제대로 작동하지 않는 것 같습니다. 나는 어떤 종류의 스크립팅에도 능숙하지 않습니다.
여기에 스크립트가 있습니다. nc
.txt의 명령에 대한 응답에서 "성공"이 확인되면 작업을 수행하기 를 원합니다 OPEN
.
while read SERVER
do
OPEN=$(nc -z -v -w5 $SERVER 22)
echo $SERVER
if [[ $OPEN = *"suc"* ]];
then
echo "Found SSH open on $SERVER"
else
echo "No open ports on $SERVER!"
fi
done < server.txt
서버 목록은 server.txt
스크립트 끝 부분에서 참조되는 파일에 있습니다.
이것이 내가 얻은 응답입니다. 나는 아니에요
nc: connect to 10.10.51.55 port 22 (tcp) failed: No route to host
10.10.51.55
No open ports on test1!
Connection to 10.10.51.65 22 port [tcp/ssh] succeeded!
10.10.50.65
No open ports in test2!
무슨 일이 있어도 "$SERVER에 열려 있는 포트가 없습니다"라고 표시됩니다.
어떤 지침이라도 감사드립니다.
답변1
댓글, 댓글이 너무 깁니다.
server.txt
server-list
이름을 정 하거나servers.txt
원한다면 좋을 것입니다 .피하고 유사한 소문자 변수 이름을 사용 하고 호스트 이름을 사용하는지 IP를 사용하는지 명확하지 않기 때문에 어쨌든 이름을 지정
SERVER
하는 것이 좋습니다 .server_ip
정수가 아닌 변수는 모두 큰따옴표로 묶습니다
"$server_ip"
.blackhole( ) 변수 로 리디렉션하는
if
대신 직접적인 설명을 사용하세요 .$OPEN
/dev/null
위 내용을 바탕으로 다시 작성했습니다.
#!/bin/sh
while read -r server_ip; do
if nc -z -v -w5 "$server_ip" 22 >/dev/null 2>&1; then
echo "Found SSH port open on $server_ip."
else
echo "Did not find open SSH port on $server_ip." >&2
fi
done < server-list
답변2
가장 간단한 해결책은 다음과 같습니다.
if nc -z -v -w5 $SERVER 22 >/dev/null 2>&1;
then
echo "Found SSH open on $SERVER"
else
echo "No open ports on $SERVER!"
fi
답변3
문제는 nc
진단 메시지가 출력 시 표준 오류에 기록되는 반면 명령 대체는 표준 출력만 캡처한다는 것입니다.
==
에서도 사용해야 합니다 [[ ... ]]
. 변수 확장은 인용되어야 하며 이상적으로는 이를 사용하여 printf
변수 데이터를 출력하는 것이 좋습니다.
이는 귀하의 코드가 다음과 같을 수 있음을 의미합니다.
while IFS= read -r SERVER do
OPEN=$( nc -z -v -w5 "$SERVER" 22 2>&1 )
if [[ "$OPEN" == *succ* ]]; then
printf 'Found SSH open on %s\n' "$SERVER"
else
printf 'No open ports on %s!\n' "$SERVER"
fi
done <server.txt
또는
while IFS= read -r SERVER do
OPEN=$( nc -z -v -w5 "$SERVER" 22 2>&1 )
case "$OPEN" in
*succ*) printf 'Found SSH open on %s\n' "$SERVER" ;;
*) printf 'No open ports on %s!\n' "$SERVER" ;;
esac
done <server.txt
또는 다음 종료 상태를 사용할 수도 있습니다 nc
.
while IFS= read -r SERVER do
if nc -z -v -w5 "$SERVER" 22 >/dev/null 2>&1; then
printf 'Found SSH open on %s\n' "$SERVER"
else
printf 'No open ports on %s!\n' "$SERVER"
fi
done <server.txt