Utilisation de telnet dans un script shell


8

J'utilise la commande telnet pour vérifier si le port MySQL répond.

telnet 10.10.10.24 3306

J'utilise le caractère ctrl pour me déconnecter. Cela fonctionne comme prévu. Comment utiliser cette commande dans un script shell?


En fait, faites l'écho avec des sauts de ligne comme Janne le propose, et ajoutez une valeur de délai d'attente raisonnable avec -w.
3molo

Réponses:


12

Si vous cherchez simplement à vérifier si le port est ouvert, essayez:

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

ncrenverra 0 si le port est ouvert et 1 s'il ne l'est pas. Ceci est également très utile pour les scripts. Omettez le vcommutateur pour le garder silencieux:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi

Merci. Mais le commutateur -z fonctionne sur le serveur mais ne fonctionne pas sur un autre. Dois-je vérifier la version de la commande nc?
shantanuo

Peut-être. Quelle version ne fonctionne pas?
Cakemox

Le commutateur -z fonctionne correctement. J'avais tort, ignorez le commentaire ci-dessus.
shantanuo

9

ncest beaucoup mieux pour une utilisation non interactive. Essayez quelque chose comme

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

Si j'exécute cela, j'obtiens une sortie tronquée, mais la commande ne se ferme pas. Est-ce que quelqu'un sait pourquoi?
Christoph Wurm

Hmmm? Il devrait sortir.
Janne Pikkarainen

4

Si vous n'avez pas nc, vous pouvez utiliser des redirections de fichiers spéciaux bash:

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


1

Ceci est mon script pour tous les cas spécifiques.

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

J'utiliserais netcat et c'est '-w' à la place;

hôte: ~ utilisateur $ nc -w 1 1.2.6.1 3306
?
5.1.57-1 ~ dotdeb.1? WO`rA * L # h? B4z.pmT; i ~ ^; host: ~ user $ 

0

Voici comment utiliser telnet dans le shell bash / 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 "'^]'."
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.