سؤال

أحاول كتابة السيناريو أن تسمح لي بتسجيل الدخول إلى وحدة التحكم خوادم 48 منفذا بحيث يمكن بسرعة تحديد ما هي الأجهزة متصلة مع بعضها المسلسل خط.

أساسا كنت تريد أن تكون قادرة على أن يكون البرنامج النصي أنه بالنظر إلى قائمة من المضيفين/الموانئ ، telnets إلى الجهاز الأول في قائمة ويترك لي في الوضع التبادلي بحيث لا يمكن تسجيل الدخول وتأكيد الجهاز ، ثم عند إغلاق جلسة عمل telnet, يربط إلى الدورة التالية في القائمة.

المشكلة التي تواجه أنا هو أنه إذا كنت بدء تشغيل جلسة عمل telnet من داخل تنفيذي باش النصي الدورة ينهي على الفور بدلا من الانتظار للحصول على المدخلات.

على سبيل المثال, نظرا البرمجية التالية:

$ cat ./telnetTest.sh
#!/bin/bash

while read line
do
        telnet $line
done
$

عند تشغيل الأمر 'echo "اسم المضيف" | testscript.sh' أنا تتلقى الإخراج التالي:

$ echo "testhost" | ./telnetTest.sh
Trying 192.168.1.1...
Connected to testhost (192.168.1.1).
Escape character is '^]'.
Connection closed by foreign host.
$

لا أحد يعرف من طريقة لإيقاف جلسة عمل telnet إغلاق تلقائيا ؟

هل كانت مفيدة؟

المحلول

تحتاج إلى توجيه محطة الإدخال إلى telnet العملية.هذا ينبغي أن يكون /dev/tty.لذلك السيناريو الخاص بك سوف ننظر شيئا مثل:

#!/bin/bash

for HOST in `cat`
do
  echo Connecting to $HOST...
  telnet $HOST </dev/tty
done

نصائح أخرى

أعتقد أن عليك أن تنظر في نتوقع البرنامج.انها موجودة في كل توزيعات لينكس الحديثة.هنا بعض حصول exmaple النصي:

#!/usr/bin/expect -f
spawn telnet $host_name
expect {
   "T0>"                {}
   -re "Connection refused|No route to host|Invalid argument|lookup failure"
                        {send_user "\r******* connection error, bye.\n";exit}
   default              {send_user "\r******* connection error (telnet timeout),
 bye.\n";exit}
}
send "command\n"
expect -timeout 1 "something"

تفرخ الأمر بدء الدخول عن بعد برنامج (telnet, ssh, netcat الخ)

expext الأوامر المستخدمة في...جلالة..نتوقع شيئا من بعد الدورة

إرسال - إرسال الأوامر

send_user - طباعة تعليقات المعياري

شكرا ديف - كان TTY إعادة التوجيه أن كنت في عداد المفقودين.

الحل الكامل اعتدت, بالنسبة لأولئك الذين يرغبون:

#!/bin/bash

TTY=`tty` # Find out what tty we have been invoked from.
for i in `cat hostnames.csv` # List of hosts/ports
do
        # Separate port/host into separate variables
        host=`echo $i | awk -F, '{ print $1 }'`
        port=`echo $i | awk -F, '{ print $2 }'`
        telnet $host $port < $TTY # Connect to the current device
done

Telnet إلى الملقم باستخدام Shell Script سبيل المثال:

Test3.sh ملف:

#!/bin/sh

#SSG_details is file from which script will read ip adress and uname/password
#to telnet.

SSG_detail=/opt/Telnet/SSG_detail.txt

cat $SSG_detail | while read ssg_det ; do

   ssg_ip=`echo $ssg_det|awk '{print $1}'`
   ssg_user=`echo $ssg_det|awk '{print $2}'`
   ssg_pwd=`echo $ssg_det|awk '{print $3}'`


   echo " IP to telnet:" $ssg_ip
   echo " ssg_user:" $ssg_user
   echo " ssg_pwd:" $ssg_pwd

   sh /opt/Telnet/Call_Telenet.sh $ssg_ip $ssg_user $ssg_pwd 

done


exit 0

على Call_Telenet.sh السيناريو هو على النحو التالي:

#!/bin/sh

DELAY=1 
COMM1='config t'                 #/* 1st commands to be run*/
COMM2='show run'
COMM3=''
COMM4=''
COMM5='exit'
COMM6='wr'
COMM7='ssg service-cache refresh all'
COMM8='exit'                     #/* 8th command to be run */


telnet $1 >> $logfile 2>> $logfile |&
sleep $DELAY
echo -p $2 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $3 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $4 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $5 >> $logfile 2>> $logfile
sleep $DELAY

sleep $DELAY
sleep $DELAY
sleep $DELAY
echo -p $COMM7 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $COMM8 >> $logfile 2>> $logfile
sleep $DELAY

exit 0

تشغيل الملف أعلاه على النحو التالي:

$> ./test3.sh 

ربما قد تتمكن من محاولة باش -أنا لإجبار الدورة أن تكون في الوضع التفاعلي.

المشكلة في المثال الخاص بك هو أنه يمكنك ربط مدخلات البرنامج النصي الخاص بك (أو غير مباشر من telnet) إلى إخراج echo.وذلك بعد echo هو القيام به ، telnet بدأ هناك المزيد من المدخلات إلى قراءة.إصلاح بسيط يمكن أن تحل محل echo "testhost" قبل { echo "testhost"; cat; }.

تحرير: telnet لا يبدو أن مثل أخذ المدخلات من الأنابيب.ومع ذلك ، netcat لا هو على الارجح مجرد مناسبة في هذه الحالة.

@muz لدي الإعداد مع ssh, لا telnet, لذلك أنا لا يمكن اختبار ما إذا كانت المشكلة هي telnet ذات الصلة ، ولكن تشغيل البرنامج النصي التالي سجلات لي تباعا إلى مختلف آلات يسأل عن كلمة السر.

for i in adele betty
do
ssh all@$i
done

إذا كانت البيئة الخاصة بك X11 القائم على الاحتمال فتح إكس تيرم تعمل telnet:

xterm -e telnet $host $port

العمليات في إكس تيرم التفاعلية شيل هو توقف حتى إكس تيرم الإنهاء.

جرب هذه الروابط.

http://planetozh.com/blog/2004/02/telnet-script/

http://www.unix.com/unix-dummies-questions-answers/193-telnet-script.html

#!/bin/sh
( echo open hostname
sleep 5
echo username
sleep 1
echo password
sleep 1
echo some more output, etc. ) | telnet

أنها عملت بالنسبة لي :D

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top