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?

shantanuo
la source
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
Cakemox
la source
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
Janne Pikkarainen
la source
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
Michał Šrajer
la source
2

Pour automatiser le script telnet, vous devez utiliser expect. Voir la page d'accueil attendue .

jfg956
la source
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/

Fabio Abreu
la source
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 $ 
3molo
la source
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 "'^]'."
grepit
la source