التنفيذ
الوظيفة | تنفيذ أمر أو برنامج نصي مضمن (bash، perl، python) على المجمع المُعد للمهمة أو على مضيف بعيد محدد بواسطة عنوان IP للجهاز عبر ssh. يمكن إدخال الأمر الذي يجب تنفيذه إما عن طريق مسار الأمر مع حجج الأمر الاختيارية أو عبر برنامج نصي مضمن. |
|---|---|
التنبيه | وقت التشغيل، رمز الخروج، قيمة الإرجاع <0-n>، قيمة السلسلة <0-n> |
لا يمكن إنشاء/تحرير مهام التنفيذ إلا من قبل المستخدمين من نوع المسؤول لأنها تسمح بتنفيذ تعليمات برمجية عشوائية على جامع SKOOR أو الخادم (في حالة الجامع المحلي). يتم تنفيذ
الملف القابل للتنفيذ أو التعليمات البرمجية التي تم إدخالها في مربع النص المضمن باستخدام أذونات مستخدم eranger. لذلك، لا يمكن تنفيذ سوى أوامر محدودة، ما لم يقم مسؤول Linux (الجذر) بتمكين أوامر إضافية باستخدام sudo على سبيل المثال.
تفاصيل التنفيذ
عند تحديد مربع الاختيار "تنفيذ عن بُعد"، يتغير مربع الحوار ويسمح بإدخال منفذ ssh وبيانات الاعتماد لتشغيل الأمر أو البرنامج النصي عن بُعد:
لا يمكن للمهام التي يتم تنفيذها عن بُعد إرسال ملفات الإنذار إلى الخادم. لا يمكن معالجة الملفات إلا على المجمع، وليس على الأنظمة البعيدة
عند تحديد زر الاختيار "برنامج نصي مضمن"، يتغير مربع الحوار ويسمح بإدخال كود البرنامج النصي داخل مربع نص أكبر:
معلمات التنفيذ
المعلمة | الوصف |
|---|---|
تنفيذ عن بُعد | قم بتنشيط مربع الاختيار هذا لتشغيل الأمر أو البرنامج النصي عبر ssh |
منفذ SSH | منفذ TCP الذي يستمع إليه خادم ssh |
اسم المستخدم | حساب مستخدم موجود على الجهاز البعيد |
كلمة | كلمة مرور صحيحة لحساب المستخدم على الجهاز البعيد |
تنفيذ | البرنامج: نص برمجي مضمن: |
مسار البرنامج | المسار المطلق للأمر (النص البرمجي أو الثنائي) المراد تنفيذه |
نص برمجي مضمن | مربع نص يمكن إدخال الأوامر والنصوص البرمجية الكاملة فيه. يتم تشغيل النصوص البرمجية المضمنة باستخدام shell /bin/sh بشكل افتراضي، ولكن باستخدام وظائف التضمين الموجودة مسبقًا (انظر أدناه)، يمكن استخدام البرمجة النصية bash و perl و python (انظر أدناه). تتمثل إحدى مزايا إضافة النصوص البرمجية داخل النص البرمجي المضمن في أنها يتم تخزينها في قاعدة بيانات تكوين SKOOR ولا يلزم إدارة أي كود خارجي على مستوى نظام الملفات. يمكن إدخال التعليقات باستخدام حرف الهاش (#). |
الحجة <n> | يمكن تمرير حجة واحدة أو عدة حجج إلى الأمر. انقر فوق الزر + لإضافة حجج إضافية. |
حفظ المخرجات في ملف | بشكل افتراضي، يتم تخزين اسم الملف الذي يتم إدخاله هنا في /var/opt/run/eranger/collector/tmp على جامع SKOOR Engine وسيحتوي على محتويات الإخراج القياسي للأمر و/أو الخطأ القياسي. يوصى بشدة باستخدام اسم ملف فريد، على سبيل المثال باستخدام علامة $ID$ التي سيتم استبدالها بمعرف المهمة (على سبيل المثال my_output_$ID$.out). في حالة استخدام أسماء ملفات بسيطة، قد يحدث أن تكتب مهام متعددة إلى نفس الملف |
إلغاء وقت التشغيل | إذا تم تمكين مربع الاختيار هذا، فسيتم تجاهل وقت تشغيل كل فحص ولن يتم حفظه في قاعدة البيانات ولن تكون قيمته مرئية في قسم القيم. كما أن قيمته لن تكون متاحة للاستخدام في مواصفات حدود الإنذار. |
رمز الخروج | يتيح زر الوحدة تحديد اسم لرمز الخروج للملف القابل للتنفيذ، بالإضافة إلى الوحدة والمقسوم والمقسوم عليه والوصف والدقة العددية. |
قيم الإرجاع | يسمح بإضافة أي عدد من قيم الإرجاع بالنقر فوق الزر +. لكل قيمة من قيم الإرجاع، يظهر زر وحدة ويسمح بتحديد اسم قيمة الإرجاع بالإضافة إلى وحدتها ومقسومها ووصفها ودقتها العددية (عدد المنازل العشرية). إذا لم يتم تحديد أي قيم إرجاع، يتم قراءة رمز الخروج فقط. |
قيم السلسلة | يسمح بإضافة أي عدد من قيم السلسلة بالنقر فوق الزر +. لكل قيمة من قيم السلسلة، يظهر زر وحدة ويسمح بتحديد اسم قيمة السلسلة بالإضافة إلى وحدتها ووصفها. استخدم فقط لمجموعة محدودة من السلاسل الثابتة المعروفة، وليس للسلاسل التي تتغير كثيرًا (التي تحتوي على سبيل المثال على الوقت والتاريخ). |
تسمح القائمة المنسدلة "العلامات" بإدخال متغيرات محددة مسبقًا في الحقول أعلاه، على سبيل المثال $NAME$ لاسم المهمة.
الدليل العامل لتنفيذ البرنامج النصي هو /var/opt/run/eranger/collector، وبالتالي فإن تحديد مسار ملف نسبي مثل bin/script.sh داخل البرنامج النصي المضمن أو مسار البرنامج سيشير إلى /var/opt/run/eranger/collector/bin/script.sh.
تنفيذ وظائف التضمين لـ bash و perl و python
يتيح تحديد زر الاختيار "النص البرمجي المضمن" إدخال نص برمجي في مربع النص الكبير. يتم دعم لغات البرمجة bash و perl و python. توفر وظيفة Execute (تنفيذ) وظائف تضمين متنوعة لهذه اللغات لتعيين مخرجات البرنامج النصي لقيم الإرجاع وقيم السلاسل ورسالة المعلومات. لاستخدام هذه الوظائف، يجب تضمينها أولاً عن طريق توجيه المؤشر إلى السطر الأول في مربع النص Inline script (البرنامج النصي المضمن) وتحديد وظيفة التضمين المقابلة لإحدى لغات البرمجة النصية الثلاث من القائمة المنسدلة Tags (العلامات):
على سبيل المثال، تؤدي إضافة عنصر وظيفة التضمين sh/bash إلى إضافة الكود التالي إلى البرنامج النصي المضمن:
الآن يمكن استخدام الوظائف التالية داخل البرنامج النصي لتعيين القيم الرقمية والسلاسل إلى قيم الإرجاع وقيم السلاسل ورسالة المعلومات:
الوظيفة | الوصف |
|---|---|
setErangerValue | ربط قيمة رقمية واحدة بقيمة مرتجعة محددة بواسطة مؤشرها (1-n) |
setErangerValues | تعيين قيم رقمية متعددة إلى قيم إرجاع متعددة، مع إضافة قيم الإرجاع وفقًا لعدد قيم الإدخال المحددة |
setErangerStringValue | تعيين سلسلة واحدة إلى قيمة سلسلة محددة بواسطة مؤشرها (1-n) |
setErangerStringValues | تعيين سلاسل متعددة إلى قيم سلسلة، مع إضافة قيم سلسلة وفقًا لعدد سلاسل الإدخال المحددة |
setErangerInfoMessage | تعيين قيمة رقمية أو سلسلة إلى محتويات رسالة معلومات المهمة |
addErangerInfoMessage | إضافة قيمة رقمية أو سلسلة إلى محتويات رسالة معلومات المهمة |
getLastErangerValue | الحصول على القيمة من آخر قياس حسب المؤشر (1-n). إذا لم يتوفر قياس سابق، فستُرجع الدالة 0 |
getLastErangerStringValue | الحصول على قيمة سلسلة من القياس الأخير حسب المؤشر (1-n). ستُرجع الدالة سلسلة فارغة إذا لم يكن هناك قياس سابق متاح |
outputErangerValues | إذا تمت إضافة أي قيم مرتجعة أو قيم سلسلة أو محتويات رسائل معلومات باستخدام الوظائف المذكورة أعلاه، فيجب إضافة هذه الوظيفة كعنصر أخير في البرنامج النصي |
تنفيذ القيم وحدود الإنذار
القيمة / حد الإنذار | الوصف |
|---|---|
وقت التشغيل | الوقت الذي استغرقه تنفيذ الأمر أو البرنامج النصي (باستثناء إذا تم تعطيله عن طريق تحديد معلمة "إلغاء وقت التشغيل") |
رمز الخروج | رمز الخروج للأمر أو البرنامج النصي |
قيمة الإرجاع <0-n> | قيمة عددية بدقة عدد صحيح أو عدد عشري. يمكن تحديد حدود الإنذار على جميع قيم الإرجاع المكونة. |
قيمة السلسلة <0-n> | قيمة سلسلة. استخدم فقط لمجموعة محدودة من السلاسل الثابتة المعروفة، وليس للسلاسل التي تتغير كثيرًا (التي تحتوي على سبيل المثال على الوقت والتاريخ). يمكن تحديد حدود الإنذار على جميع قيم السلاسل المكونة. |
رمز الخطأ | رمز خطأ عام للمهمة (انظر قسم رموز أخطاء المهام) |
أمثلة على التنفيذ
مثال 1 - تشغيل أمر واحد مع عدة وسيطات سطر أوامر
ستعمل المعلمات التالية على تشغيل الأمر sudo لتشغيل برنامج نصي لإعادة تشغيل خدمة التقارير في SKOOR Engine:
لا يلزم تحديد قيم إرجاع أو سلسلة، سيتم فقط التحقق من رمز الخروج للأمر المدمج.
الإخراج 1
إذا لم يعمل الأمر لسبب ما، أدخل اسم ملف في مربع النص المعلمة حفظ الإخراج في ملف:
سيتم إعادة توجيه الإخراج القياسي و/أو الخطأ القياسي للأمر إلى هذا الملف. يمكن عرضه من قسم قيمة المهمة:
انقر فوق الزر "تحديث الملف"، وسيتحول اسم الملف إلى رابط:
انقر على الرابط لعرض إخراج الأمر في علامة تبويب أو نافذة متصفح منفصلة:
Running /opt/eranger/bin/eRanger.sh with root privileges... eRanger Server installation... waiting up to 15 seconds for 7090 to terminate Stopping eranger-report[ OK ] Starting eranger-report[ OK ]
مثال 2 - تشغيل برنامج نصي مضمن مع وظائف bash include
محتويات مربع نص البرنامج النصي المضمن لإجراء حساب بسيط لعدد عشوائي:
. /opt/eranger/collector/eranger_exec_values.sh newValue=$RANDOM lastValue=$(getLastErangerValue 1) diffValue=$(expr $newValue - $lastValue) setErangerValues $newValue $diffValue outputErangerValues
يجب تعريف قيمتي إرجاع كما هو محدد في البرنامج النصي المضمن. في المثال التالي، تم تعريف القيمة الجديدة والفرق:
يتيح النقر فوق الزر "الوحدة" تحديد تفاصيل القيمة:
الناتج 2
مثال 3 - تشغيل برنامج نصي مضمن مع وظائف bash include واستخدام الخصائص المخصصة للمهمة كمتغيرات للبرنامج النصي
سيؤدي ما يلي إلى تشغيل نص محدد كمتغير مع حجج نصية تم تمريرها من خاصية مخصصة. يقوم النص بتنزيل ملف محدد (الحجة 2) من خادم FTP (الحجة 1).
يجب أولاً تعريف الخاصية المخصصة لوسائط سطر الأوامر باستخدام قائمة Admin (الإدارة). انقر فوق الزر Admin (الإدارة) في الزاوية العلوية اليمنى من عرض التكوين، ثم حدد Custom properties (الخصائص المخصصة) من القائمة المنسدلة Search (بحث):
انقر فوق الزر + في أسفل الشاشة. يظهر قسم الخصائص المضافة حديثًا:
قم بتسمية الخاصية المخصصة، ثم حدد أن هذه الخاصية المخصصة يجب أن تكون متاحة فقط لكائنات المهام:
انقر فوق "تطبيق"، ثم ابحث عن معرف الخاصية المضافة حديثًا عن طريق تمرير الماوس فوق اسمها:
اخرج من قائمة الإدارة بالنقر فوق الزر Admin (الإدارة) مرة أخرى في الزاوية العلوية اليمنى. أصبحت الخاصية المخصصة متاحة الآن لإضافتها إلى كل مهمة.
أضفها إلى "تنفيذ المهمة" واملأ معلمات سطر الأوامر للبرنامج النصي المشار إليه في "البرنامج النصي المضمن":
في هذه الحالة، هناك حجتان لسطر الأوامر، مفصولة بمسافة.
أضف الآن محتويات مربع النص البرنامج النصي المضمن:
. /opt/eranger/collector/eranger_exec_values.sh
SCRIPT="/var/opt/run/eranger/bin/ftp_download_local.sh"
PARAMS="$OID_74$"
VALUE=$(${SCRIPT} ${PARAMS})
setErangerValue 1 $VALUE
outputErangerValues
ثم أضف قيمة إرجاع واحدة:
يعرض البرنامج النصي سرعة تنزيل FTP بالكيلوبايت/ثانية، لذا يجب إضافة مقسوم لتحويلها إلى ميجابت/ثانية.
الميزة الرئيسية لاستخدام الخصائص المخصصة لتغذية الحجج هي أنه يمكن إعادة استخدام نفس كتلة كود البرنامج النصي المضمن للعديد من المهام باستخدام قالب مهمة (انظر قسم القوالب) مع اختلاف الخصائص المخصصة فقط بين المهام المختلفة.
الإخراج 3
مثال 4 - تشغيل نص برمجي مضمن مع وظائف bash include واستخدام مكالمة ssh عن بُعد
يُشغّل البرنامج النصي المضمن التالي أمرًا عن بُعد باستخدام أمر ssh. يُفترض أن مصادقة ssh قد تم تكوينها بالفعل باستخدام مفاتيح عامة بدون كلمة مرور، لذلك لا يُطلب إدخال كلمة مرور عند الاتصال بخادم ssh البعيد.
يقرأ الأمر عدد عمليات ddclient التي يتم تشغيلها عن بُعد. يتم استخدام المتغير الداخلي $DEVICE_ADDRESS$.
. /opt/eranger/collector/eranger_exec_values.sh cmd="ps -u root | grep 'ddclient - ' | wc -l" num_procs=$(ssh -o ConnectTimeout=15 -o ConnectionAttempts=1 eranger@$DEVICE_ADDRESS$ "$cmd") setErangerValue 1 $num_procs outputErangerValues
أضف قيمة إرجاع واحدة:
الإخراج 4
مثال 5 - تشغيل الأمر عن بُعد عبر ssh
يستخدم المثال التالي مربع الاختيار Execute remotely (تنفيذ عن بُعد) ليتمكن من إدخال بيانات اعتماد مصادقة ssh وتشغيل أمر على جهاز بعيد:
لا يمكن استخدام قيم الإرجاع أو قيم السلسلة عند التنفيذ عن بُعد، يتم فحص رمز الخروج فقط.
الإخراج 5
المثال 6 - تشغيل استعلام WMI على خادم Windows 2000 وقراءة سجل الأحداث الخاص به
استخدم البرنامج النصي المضمن التالي:
. /opt/eranger/collector/eranger_exec_values.sh
# this does a wmi query to windows 2000 servers
# for server 2003 upwards, use the dedicated "Agent Eventlog"
# job plugin directly.
# for the query to work, port tcp135 and the portrange tcp1025-tcp65535
# must be accessible from this collector to the remote windows server
# BEWARE: when querying the eventlog for lots of events, especially events
# of severity 3, the query can take a very long time, sometimes hours.
# However, the maximum allowed runtime of a SKOOR execute job is merely 5
# minutes after which the job will kill this script and exit with a warning
# login credentials for wmi query (needs to be either an administrator
# account or must have sufficient privileges to do remote wmi queries
USER=skoor
PWD=<fill in password here>
# Filter parameters (uncomment only parameters that are used)
# Logfile can be \'Application\', \'Security',
# \'System\', or e.g. \'CustomEventLog\'
Logfile=\'Application\'
# Event source (always enclose in \'....\')
SourceName=\'FEP\'
# Event ID
#EventCode=203
# Severity (1=Error, 2=Warning, 3=Information,
# 4=Security Audit Success, 5=Security Audit Failure)
EventType=1
# Event description (find events that contain the following string(s)
# anywhere in the event description)
#Message='string1'
#Message='string1|string2' (for filtering multiple strings inside message field, use pipe delimiter)
Message='WSAECONNREFUSED'
# search only events which have been logged
# during the last XXX minutes (always adapt
# to job execution interval)
Maxage=3
################################################3
Maxagesec=$((Maxage*60))
Tepoch=$(date +%s)
Tstart=$((Tepoch-Maxagesec))
# get start time in UTC
Tstart_datetime=\'$(date -u -d @$Tstart +%Y%m%d%H%M00.000000+000)\'
# construct query
Query="Select Logfile,Message,RecordNumber from Win32_NTLogEvent where Logfile=${Logfile} and TimeWritten>${Tstart_datetime}"
[ ! -z "${SourceName}" ] && Query+=" and SourceName=${SourceName}"
[ ! -z "${EventCode}" ] && Query+=" and EventCode=${EventCode}"
[ ! -z "${EventType}" ] && Query+=" and EventType=${EventType}"
echo "WMI Query is ${Query}"
wmic -U ${USER}%${PWD} //$DEVICE_ADDRESS$ "${Query}" > $DEVICE_NAME$_$ID$_eventlog.out
RC=$?
if [ ! -z "${Message}" ]; then
Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | egrep ${Message} | wc -l)
else
Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | wc -l)
fi
setErangerValue 1 $Eventcount
setErangerValue 2 $RC
outputErangerValues
ثم أضف قيمتي إرجاع:
الإخراج 6
مثال 7 - تنزيل wget مع إنهاء تلقائي بعد 45 ثانية
استخدم الترميز التالي للتأكد من إنهاء الأمر الخارجي (wget في هذه الحالة) تلقائيًا إذا استمر تشغيله لأكثر من 45 ثانية:
(sleep 45; kill -9 -$$) & wget -O /dev/null http://www.debian.org/netinst.iso


























