쉘 스크립트에서 텔넷 사용


8

telnet 명령을 사용하여 MySQL 포트가 응답하는지 확인합니다.

telnet 10.10.10.24 3306

Ctrl 문자를 사용하여 연결을 끊습니다. 이것은 예상대로 작동합니다. 쉘 스크립트에서이 명령을 어떻게 사용합니까?


실제로 Janne이 제안한대로 줄 바꿈을 사용하여 에코를 수행하고 -w를 사용하여 정상 시간 초과 값을 추가하십시오.
3molo

답변:


12

포트가 열려 있는지 확인하려면 다음을 시도하십시오.

$ nc -zv 10.10.10.24 3306
Connection to localhost 3306 port [tcp/mysql] succeeded!

nc포트가 열려 있으면 0을, 그렇지 않으면 1을 반환합니다. 이것은 스크립팅에도 매우 도움이됩니다. v조용히 유지 하려면 스위치를 생략하십시오 .

if ! nc -z 10.10.10.24 3306
then
    do_something
fi

감사. 그러나 -z 스위치는 서버에서 작동하지만 다른 서버에서는 작동하지 않습니다. nc 명령의 버전을 확인해야합니까?
shantanuo

혹시. 작동하지 않는 버전은 무엇입니까?
Cakemox

-z 스위치가 올바르게 작동합니다. 나는 틀렸다, 위의 의견을 무시하십시오.
shantanuo

9

nc비 대화식 사용에 훨씬 좋습니다. 같은 것을 시도하십시오

echo -e "\n\n" | nc 10.10.10.24 3306

이것을 실행하면 약간의 출력이 깨지지 만 명령이 종료되지 않습니다. 누군가 이유를 알고 있습니까?
Christoph Wurm

흠? 종료해야합니다.
Janne Pikkarainen

4

nc가없는 경우 bash 특수 파일 리디렉션을 사용할 수 있습니다.

head -1 < /dev/tcp/10.10.10.24/3306 >/dev/null && echo MySQL is on || echo MySQL is off


1

이것은 특정 경우에 대한 내 스크립트입니다.

host=localhost
DATE=`date +%Y-%m-%d`
TIME=`date +%H%M%S`
LOG_OK=/tmp/telnet_ok
LOG_FAIL=/tmp/telnet_falha

for port in 80 25 22 443 110
do
if telnet -c $host $port </dev/null 2>&1 | grep -q Escape; then
  echo "$DATE $TIME  $port: Connected" >> $LOG_OK
else
  echo "$DATE $TIME $port : no connection" >> $LOG_FAIL
fi
done

http://fajlinux.com.br/2014/10/10/script-monitorando-via-telnet/


0

netcat을 사용하고 대신 '-w'입니다.

호스트 : ~ user $ nc -w 1 1.2.6.1 3306
?
5.1.57-1 ~ dotdeb.1? WO`rA * L # h? b4z.pmT; i ~ ^; host : ~ user $ 

0

bash 쉘 / 예상에서 텔넷을 사용하는 방법은 다음과 같습니다

#!/usr/bin/expect
# just do a chmod 755 one the script
# ./YOUR_SCRIPT_NAME.sh $YOUHOST $PORT
# if you get "Escape character is '^]'" as the output it means got connected otherwise it has failed

set ip [lindex $argv 0]
set port [lindex $argv 1]

set timeout 5
spawn telnet $ip $port
expect "'^]'."
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.