Usando telnet en el script de shell

8

Uso el comando telnet para verificar si el puerto MySQL está respondiendo.

telnet 10.10.10.24 3306

Yo uso el carácter Ctrl para desconectar. Esto está funcionando como se esperaba. ¿Cómo uso este comando en el script de shell?

shantanuo
fuente
En realidad, haga el eco con nuevas líneas como Janne propone, y agregue un valor de tiempo de espera sensato con -w.
3molo

Respuestas:

12

Si solo está buscando verificar si el puerto está abierto, intente:

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

ncdevolverá 0 si el puerto está abierto y 1 si no lo está. Esto también es bastante útil para las secuencias de comandos. Omita el vinterruptor para mantenerlo en silencio:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi
Cakemox
fuente
Gracias. Pero el modificador -z funciona en el servidor pero no en otro. ¿Necesito verificar la versión del comando nc?
shantanuo
Quizás. ¿Qué versión no funciona?
Cakemox
El modificador -z funciona correctamente. Me equivoqué, ignore el comentario anterior.
shantanuo
9

nces mucho mejor para uso no interactivo. Intenta algo como

echo -e "\n\n" | nc 10.10.10.24 3306
Janne Pikkarainen
fuente
Si ejecuto esto, obtengo un resultado confuso, pero el comando no sale. ¿Alguien sabe por qué?
Christoph Wurm
Hmmm? Debería salir.
Janne Pikkarainen
4

Si no tiene nc, puede usar las redirecciones de archivos especiales de bash:

head -1 < /dev/tcp/10.10.10.24/3306 >/dev/null && echo MySQL is on || echo MySQL is off
Michał Šrajer
fuente
1

Este es mi script para casos específicos.

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/

Fabio Abreu
fuente
0

Usaría netcat y es '-w' en su lugar;

host: ~ usuario $ nc -w 1 1.2.6.1 3306
?
5.1.57-1 ~ dotdeb.1? WO`rA * L # h? B4z.pmT; i ~ ^; host: ~ usuario $ 
3molo
fuente
0

Aquí se explica cómo usar telnet en bash shell / expect

#!/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 "'^]'."
grepit
fuente