Использование telnet в скрипте оболочки


8

Я использую команду telnet, чтобы проверить, отвечает ли порт MySQL.

telnet 10.10.10.24 3306

Я использую символ Ctrl для отключения. Это работает, как ожидалось. Как мне использовать эту команду в сценарии оболочки?


На самом деле, сделайте эхо с символами новой строки, как предлагает Янне, и добавьте значение тайм-аута с помощью -w.
3моло

Ответы:


12

Если вы просто хотите проверить, открыт ли порт, попробуйте:

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

ncвернет 0, если порт открыт, и 1, если нет. Это также очень полезно для написания сценариев. Опустите vпереключатель, чтобы он был тихим:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi

Спасибо. Но ключ -z работает на сервере, но не работает на другом. Нужно ли проверять версию команды nc?
Shantanuo

Может быть. Какая версия не работает?
Cakemox

Ключ -z работает правильно. Я был не прав, игнорируйте приведенный выше комментарий.
Shantanuo

9

ncнамного лучше для неинтерактивного использования. Попробуйте что-то вроде

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

Если я выполню это, я получу искаженный вывод, но команда не завершится. Кто-то знает почему?
Кристоф Вурм

Ммм? Это должно выйти.
Янне Пиккарайнен

4

Если у вас нет nc, вы можете использовать редиректы специальных файлов bash:

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


1

Это мой сценарий для любых конкретных случаев.

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

Я бы использовал netcat, а вместо этого - «-w»;

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

0

Вот как использовать telnet в оболочке bash

#!/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 "'^]'."
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.