Sử dụng telnet trong shell script


8

Tôi sử dụng lệnh telnet để kiểm tra xem cổng MySQL có phản hồi không.

telnet 10.10.10.24 3306

Tôi sử dụng ký tự ctrl để ngắt kết nối. Điều này đang làm việc như mong đợi. Làm cách nào để sử dụng lệnh này trong shell script?


Trên thực tế, hãy tạo tiếng vang với dòng mới như Janne đề xuất và thêm giá trị thời gian chờ lành mạnh với -w.
3molo

Câu trả lời:


12

Nếu bạn chỉ muốn kiểm tra xem cổng có mở không, hãy thử:

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

ncsẽ trả về 0 nếu cổng mở và 1 nếu không. Điều này là khá hữu ích cho kịch bản là tốt. Bỏ qua công vtắc để giữ im lặng:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi

Cảm ơn. Nhưng công tắc -z đang hoạt động trên máy chủ nhưng không hoạt động trên máy chủ khác. Tôi có cần kiểm tra phiên bản của lệnh nc không?
shantanuo

Có lẽ. Phiên bản nào không hoạt động?
Cakemox

Công tắc -z hoạt động chính xác. Tôi đã sai, bỏ qua các bình luận trên.
shantanuo

9

nclà tốt hơn nhiều cho việc sử dụng không tương tác. Hãy thử một cái gì đó như

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

Nếu tôi thực hiện điều này, tôi nhận được một số đầu ra bị cắt xén, nhưng lệnh không thoát. Có ai biết tại sao không?
Christoph Wurm

Hừm? Nó nên thoát ra.
Janne Pikkarainen

4

Nếu bạn không có nc, bạn có thể sử dụng chuyển hướng tập tin đặc biệt bash:

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

2

Để tự động hóa tập lệnh telnet, bạn nên sử dụng mong đợi. Xem trang chủ mong đợi .


1

Đây là kịch bản của tôi cho bất kỳ trường hợp cụ thể.

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

Tôi sẽ sử dụng netcat và thay vào đó là '-w';

máy chủ: ~ người dùng $ nc -w 1 1.2.6.1 3306
?
5.1.57-1 ~ dotdeb.1? WO`rA * L # h? B4z.pmT; i ~ ^; máy chủ: ~ người dùng $ 

0

Đây là cách sử dụng telnet trong bash shell / mong đợi

#!/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 "'^]'."
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.