호스트 이름/IP 목록에 대한 포트가 열려 있는지 확인하려고 하며 이와 같은 간단한 스크립트를 사용하여 각 호스트에 ssh로 연결하고 출력을 캡처합니다.
for i in `cat $1`
do ssh $i "sleep 5 | telnet 11.22.33.44 123"
done
Telnet은 스마트 터미널과 상호 작용하기 위한 대화형 도구로 설계되었기 때문에 "환경별 터미널 시간 없음" 오류가 발생합니다.
nc
Unix AIX 시스템에서는 명령을 사용할 수 없기 때문에 이 명령을 사용할 수 없다는 것을 알고 있습니다. 이 문제를 어떻게 해결합니까?
Connected to 11.22.33.44. Escape character is ^]
일부 호스트는 연결이 있음을 의미하는 로 응답하는 반면, 다른 호스트는 Trying ...
연결이 없음을 의미하는 로 응답합니다.
답변1
Perl은 기본적으로 설치되므로 중간 호스트에 SSH로 연결하여 Perl을 실행하도록 요청하는 것이 한 가지 방법입니다. Perl 프로그램은 다음 문서에서 사용할 수 있습니다.
for host in $(< "$1")
do
ssh "$host" perl << 'EOF'
use IO::Socket;
my $handle = IO::Socket::INET->new(
PeerAddr => '11.22.33.44',
PeerPort => 123,
Proto => 'tcp',
Timeout => 5)
or die "Failed\n";
close $handle;
print "Success\n";
EOF
done
스크립트는 TCP를 통해 지정된 IP 및 포트에 연결을 시도합니다. 실패하면 Failed
메시지가 표시되지만 성공하면 즉시 연결을 닫고 첫 번째 인수 Take에 지정된 파일 이름을 읽습니다 Success
. $(< ...)
; 이와 마찬가지로 cat
이 체계에서는 모든 파일 이름에 문자 $IFS
(기본적으로 공백, 탭 또는 줄 바꿈)가 포함되어 있지 않다고 가정합니다. 또한 host
입력 파일 내용에 쉘 와일드카드 문자(예 *
: 또는)가 포함되어 있는 ?
경우 문제를 방지하기 위해 루프 변수(여기)를 인용했습니다 [
.