English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الخلفية
هناك العديد من السيناريوهات في سكريpts Linux لتنفيذ العمليات عن بعد، مثل تسجيل الدخول عن بعد ssh، نسخ عن بعد scp، نقل الملفات sftp وما إلى ذلك. تشمل هذه الأوامر إدخال كلمات المرور الأمنية، ويجب على المستخدمين إدخال كلمات المرور يدويًا وتقبل التحقق الأمني أثناء استخدام الأوامر بشكل طبيعي. من أجل تحقيق العمليات التلقائية عن بعد، يمكننا الاستعانة بميزات expect.
expect هو لغة برمجة أدوات برمجة مجانية، تستخدم لتحقيق التواصل بين المهام التلقائية والتفاعلية دون الحاجة إلى تدخل بشري. يتطور expect باستمرار، ويزداد قوة مع مرور الوقت، ويصبح مساعدًا قويًا للمسؤولين عن النظام. يتطلب expect دعم لغة البرمجة Tcl، ويجب تثبيت Tcl أولاً قبل تشغيل expect على النظام.
تثبيت expect
تم إنشاء expect على أساس Tcl، لذا يجب علينا تثبيت Tcl أولاً قبل تثبيت expect.
(أولاً) تثبيت Tcl
الصفحة الرئيسية: http://www.tcl.tk
الرابط التحميل: http://www.tcl.tk/software/tcltk/downloadnow84.tml
1. تنزيل ملف المصدر
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
2. فك الضغط للملف المصدر
tar xfvz tcl8.4.11-src.tar.gz
3. التثبيت والتكوين
cd tcl8.4.11/unix ./configure --prefix=/usr/tcl --enable-shared make make install
النصيحة:
1. بعد إكمال التثبيت، انتقل إلى مجلد جذور مصدر Tcl، وقم بنسخ ملف tclUnixPort.h من مجلد unix إلى مجلد generic.
2. لا تدع删除 مصدر Tcl، لأن عملية تثبيت expect تحتاج إليها.
(باء)تثبيت expect (يحتاج إلى مكتبة Tcl)
الصفحة الرئيسية: http://expect.nist.gov/
1. تنزيل ملف المصدر
wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
2. فك الضغط للملف المصدر
tar xzvf expect5.45.tar.gz
3. التثبيت والتكوين
cd expect5.45 ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic make make install ln -s /usr/tcl/bin/expect /usr/expect/bin/expect
expect
النواة لـ expect هي spawn، expect، send، set.
spawn لتنفيذ الأمر المطلوب
يجب أن تنتهي سكربت expect بـ interact أو expect eof، عادةً يكفي استخدام expect eof لتنفيذ المهام التلقائية.
إعدادات أخرى
يُكتب لغة expect باستخدام لغة التكليفات
يُستخدم لغة Tcl في expect
مثال
login.exp مخصص للاتصال عن بُعد، طريقة الاستخدام المُختصرة: login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"
#!/usr/bin/expect -f ########################################################## # تنفيذ الأوامر عبر SSH # المعلمات:1.Use_Type [check/execute] # 2.SSHServerIp # 3.SSHUser # 4.SSHPassword # 5.CommandList [تُفصل الأوامر بفاصلة] # قيمة العودة: # 0 نجاح # 1 عدد المعلمات غير صحيح # 2 لم يفتح خدمة سرور SSH # 3 كلمة المرور للمستخدم SSH غير صحيحة # 4 إزالة الاتصال بسرور SSH بسبب انتهاء الصلاحية ########################################################## proc usage {} { يُحل محل ".*" $::argv0 "" name يُرسل المستخدم "استخدام:\n" يُرسل المستخدم " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList\n" يخرج 1 } ## التحقق من عدد المعلمات إذا كان [عدد الأدوار $argv] لا يساوي 5 { usage } # set variable values set Use_Type [lindex $argv 0] set SSHServerIp [lindex $argv 1] set SSHUser [lindex $argv 2] set SSHPassword [lindex $argv 3] set CommandList [lindex $argv 4] #spawn ping ${SSHServerIp} -w 5 #expect { # -nocase -re "100% packet loss" { # send_error "Ping ${SSHServerIp} is unreachable, Please check the IP address.\n" # exit 1 # } #} set timeout 360 set resssh 0 # define variable to mark whether yes confirmation is entered during ssh connection set inputYes 0 set ok_string LOGIN_SUCCESS if {$Use_Type=="check"} { # activate ssh connection, if you need to enter yes to confirm, enter yes, set inputYes to 1, otherwise enter ssh password spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string" } else { spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList" } expect { -nocase -re "yes/no" { send -- "yes\n" set inputYes 1 } -nocase -re "assword: " { send -- "${SSHPassword}\n" set resssh 1 } #-nocase -re "Last login: " { # send -- "${CommandList}\n" #} $ok_string {} -nocase -re "Connection refused" { send_error "SSH services at ${SSHServerIp} is not active.\n" exit 2 } timeout { send_error "Connect to SSH server ${SSHUser}@${SSHServerIp} timeout(10s).\n" exit 4 } } # إذا تم إدخال yes للإقرار، أدخل كلمة المرور ssh if {$inputYes==1} { expect { -nocase -re "assword: " { send -- "${SSHPassword}\n" set resssh 1 } } } # إذا ظهر رسالة try again أو password:، فإن ذلك يعني أن كلمة المرور المستخدمة غير صحيحة، اخرج مباشرة. if {$resssh==1} { expect { -nocase -re "try again" { send_error "SSH user:${SSHUser} passwd error.\n" exit 3 } -nocase -re "assword:" { send_error "SSH user:${SSHUser} passwd error.\n" exit 3 } eof {} } } send_error -- "$expect_out(buffer)" #-nocase -re "No such user" { # send_error "No such user.\n" # exit 5 # } #exit
الإجمال
هذا هو نهاية محتويات هذا المقال، نأمل أن يكون محتويات هذا المقال لهذا الدليل أو العمل ذي قيمة مرجعية، إذا كان لديك أي أسئلة، يمكنك ترك تعليق للتفاعل، شكرًا لدعم دليل النفخ.
بيان: محتويات هذا المقال تم جمعها من الإنترنت، ملكية المحتويات للمالك الأصلي، تم جمع المحتويات من قبل المستخدمين عبر الإنترنت وتم تحميلها بشكل مستقل، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتويات بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية ذات صلة. إذا كنت قد وجدت محتويات مشبوهة تتعلق بالحقوق الطبع والنشر، فنرجو منك إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الأدلة ذات الصلة، إذا تم التحقق من ذلك، سيتم حذف المحتويات المشبوهة فورًا.