Verwenden von Telnet im Shell-Skript


8

Ich benutze den Telnet-Befehl, um zu überprüfen, ob der MySQL-Port antwortet.

telnet 10.10.10.24 3306

Ich benutze das Strg-Zeichen, um die Verbindung zu trennen. Dies funktioniert wie erwartet. Wie verwende ich diesen Befehl im Shell-Skript?


Machen Sie das Echo tatsächlich mit Zeilenumbrüchen, wie Janne es vorschlägt, und fügen Sie mit -w einen vernünftigen Timeout-Wert hinzu.
3molo

Antworten:


12

Wenn Sie nur überprüfen möchten, ob der Port geöffnet ist, versuchen Sie Folgendes:

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

ncgibt 0 zurück, wenn der Port geöffnet ist, und 1, wenn dies nicht der Fall ist. Dies ist auch für Skripte sehr hilfreich. Lassen Sie den vSchalter weg , um ihn leise zu halten:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi

Vielen Dank. Der Schalter -z funktioniert jedoch auf dem Server, jedoch nicht auf einem anderen. Muss ich die Version des Befehls nc überprüfen?
Shantanuo

Vielleicht. Welche Version funktioniert nicht?
Cakemox

Der Schalter -z funktioniert ordnungsgemäß. Ich habe mich geirrt, ignoriere den obigen Kommentar.
Shantanuo

9

ncist viel besser für nicht interaktive Nutzung. Versuchen Sie etwas wie

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

Wenn ich dies ausführe, erhalte ich eine verstümmelte Ausgabe, aber der Befehl wird nicht beendet. Weiß jemand warum?
Christoph Wurm

Hmmm? Es sollte beendet werden.
Janne Pikkarainen

4

Wenn Sie kein nc haben, können Sie Bash Special Files Redirectons verwenden:

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

2

Um das Telnet-Skript zu automatisieren, sollten Sie erwarten verwenden. Siehe die erwartete Homepage .


1

Dies ist mein Skript für bestimmte Fälle.

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

Ich würde netcat verwenden und es ist stattdessen '-w';

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

0

Hier erfahren Sie, wie Sie Telnet in Bash Shell / Expect verwenden

#!/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 "'^]'."
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.