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?

Shantanuo
quelle
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
Cakemox
quelle
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
Janne Pikkarainen
quelle
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
Michał Šrajer
quelle
2

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

jfg956
quelle
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/

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