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?

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

Untuk mengotomatiskan skrip telnet, Anda harus menggunakan harapkan. Lihat halaman beranda yang diharapkan .

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

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