Menggunakan telnet dalam skrip shell


8

Saya menggunakan perintah telnet untuk memeriksa apakah port MySQL merespons.

telnet 10.10.10.24 3306

Saya menggunakan karakter ctrl untuk memutuskan sambungan. Ini berfungsi seperti yang diharapkan. Bagaimana cara menggunakan perintah ini dalam skrip shell?


Sebenarnya, lakukan gema dengan baris baru seperti yang diusulkan Janne, dan tambahkan nilai batas waktu yang waras dengan -w.
3molo

Jawaban:


12

Jika Anda hanya ingin memeriksa apakah port terbuka, coba:

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

ncakan mengembalikan 0 jika port terbuka dan 1 jika tidak. Ini cukup membantu untuk skrip juga. Hilangkan vsakelar untuk tetap diam:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi

Terima kasih. Tetapi saklar -z bekerja pada server tetapi tidak bekerja pada yang lain. Apakah saya perlu memeriksa versi perintah nc?
shantanuo

Mungkin. Versi apa yang tidak berfungsi?
Cakemox

Saklar -z bekerja dengan benar. Saya salah, abaikan komentar di atas.
shantanuo

9

ncjauh lebih baik untuk penggunaan non-interaktif. Coba sesuatu seperti

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

Jika saya menjalankan ini, saya mendapatkan beberapa output yang kacau, tetapi perintah tidak keluar. Apakah ada yang tahu kenapa?
Christoph Wurm

Hmmm? Itu harus keluar.
Janne Pikkarainen

4

Jika Anda tidak memiliki nc, Anda dapat menggunakan pengalihan file bash khusus:

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


1

Ini adalah skrip saya untuk kasus tertentu.

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

Saya akan menggunakan netcat dan itu '-w' sebagai gantinya;

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

0

Inilah cara menggunakan telnet di bash shell / harapkan

#!/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 "'^]'."
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.