أعجوبة

البرمجيات الحُرة والمفتوحة المصدر

أدوات المستخدم

أدوات الموقع


docs:scp

~~ODT~~

الاستغناء عن كلمات السر مع الامر scp

تعلم كيفية نشر ملفات بسرعة واخذ نسخ احتياطية بسهولة عند تجهيز امر النسخ للعمل دون الحاجة الى كلمات السر.

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

اذا كنت مشرف على انظمة لينكس ، فأنت غالبا ما تحتاج الى نسخ ملفات لينكس من جهاز الى آخر. أو ، قد تحتاج لتوزيع الملف الى اجهزة متعددة. يمكنك استخدام بروتوكول نقل الملفات FTP، ولكن استخدام الامر scp مزايا كثيرة. فعلى سبيل المثال ، scp هو أكثر أمنا من بروتوكول نقل الملفات scp . FTP يمر عبر الشبكه المحلية / الشبكه الواسعه مشفر ، في حين ان بروتوكول نقل الملفات FTP يستخدم النص واضح، حتى بالنسبة لكلمات السر.

ولكن ماافضله واحبه بخصوص scp انه قابل للتنفيذ داخل النصوص التنفيذية بسهولة (scriptable) . لنفترض انك بحاجة الى توزيع الملف الى 100 جهازيعمل بالينكس. أنا افضل ان أكتب نص واحد على للقيام بتنفيذ الامر 100 مرة بعدد الاجهزة. اذا حاولت ان تستخدم بروتوكول نقل الملفات FTP فى البرنامج النصي الخاص بك ، فيمكن الحصول على نتائج فوضوية ، لان كل جهاز لينكس تحاول الدخول اليه سوف يطلب كلمة سر. ولكن اذا كنت تستخدم scp في النص الخاص بك ، يمكنك ان تحدد الاشياء حتى ان اجهزة لينكس لا تسأل عن كلمة سر. صدق أو لا تصدق ، هذا في الواقع هو اكثر امنا من استخدام بروتوكول نقل الملفات.

اليك مثالا يدل التركيب الاساسي لـ scp. لنسخ الملف المسمى abc.tgz من الجهاز الخاص بك الى المجلد tmp/ على الجهاز bozo استخدم الامر التالي

scp abc.tgz root@bozo:/tmp 

الآن يطلبت منك كلمة السر للمستخدم root ( الجذر) على الجهاز bozo ، لذا نحن لم ندخل حتى الآن. هذا النظام لا يزال يسأل عن كلمة السر ، لذا فإنه ليس من السهل وضعه في نص حتى الان. لتصحيح ذلك ، اتبع هذا الاجراء لمرة واحدة ، وبعد ذلك يمكنك ان تجعل كلمة السر التي لا نهاية لها – معدومة مع scp :

1- عليك ان تحدد من من المستخدمين على الجهاز سيستخدم امر scp في وقت لاحق. وبطبيعة الحال ،المستخدم الجذر(root) هو من يعطيك القوة والمرونة، وهكذا أنا فعلت ذلك. انا لن اعطيكم محاضرة عن المخاطر من استخدام الجذرroot ، لذا اذا كنت لا تعي مقدر الخطورة من استخدامة اختر اسم اخر. وأيا كان اختيارك ، مهما كان اختيارك , ادخل مستخدما هذا الاسم والابقاء على استخدامة لبقية الاجراء. كما سجل فى نفس هذا المستخدم عند استخدام scp في وقت لاحق.

2- انشاء المفتاح العام /الخاص (public/private key )على الجهاز المحلي. ملاحظة!؟ اذا لم تكونوا على دراية بالترميز بالمفتاح العمومي ، اليكم 15 -ثانية لكي افسرها لكم . في الترميز بالمفتاح العمومي ، تقوم بتوليد زوج من المفاتيح حسابيا، واحد عام واخر خاصة . ثم تعطى المفتاح العام الخاص بك لأي شخص ولكل شخص في العالم ، ولكنك ابدا لا نعطي المفتاح الخاص بك. السحر هو في التركيب الرياضي للمفاتيح ؛ اي شخص بالمفتاح العام الخاص بك يمكنه استخدامه لتشفير رسالة ، ولكن فقط انت من يمكنه فك شفره باستخدام المفتاح الخاص بك . على أي حال ، فإن جملة تركيب لانشاء زوج المفاتيح هي :

ssh-keygen -t rsa

-3.وردا على ذلك ، يجب أن ترى التالي

.Generating public/private rsa key pair
Enter file in which to save the key ...

اضغط زر الادخال لقبول هذا.

4.وردا على ذلك ، يجب أن ترى

لست بحاجة الى كلمة مرور ، لذ قم بالضغط على مفتاح الادخال مرتين ):

5. وردا على ذلك ، يجب أن ترى

Your identification has been saved in ... 
Your public key has been saved in ... 

ملاحظه اسم ومكان المفتاح العمومي ولدت للتو. ودائما تنتهي بامتداد pub

6-انسخ المفتاح العام الذي انشىء للتو الى جميع اجهزة لينكس . يمكنك استخدام بروتوكول نقل الملفات FTP او scp او اي شىء لنسخة. على افتراض انك تستخدم الجذر – (مرة اخرى ، انظر التحذير في الخطوة 1 اعلاه )– المفتاح العام يجب ان يكون في الملف ‪/root/.ssh/authorized_keys‬ . اما ، اذا كنت قد خلت كمستخدم اخر ، على سبيل المثال ، clyde ، فان المفتاح سيكون فى ‪/home/clyde/authorized_keys‬ . لاحظ بأن الملف authorized_keys يمكن ان يحتوي على مفاتيح اخرى من الحواسيب الشخصيه. ذلك ، اذا كان الملف موجود بالفعل ويتضمن النص ، تحتاج الى ارفاق المحتويات بالمفتاح العام الخاص بك من الملف الى ما هو بالفعل هناك.

الآن ، مع القليل من الحظ ، يجب ان تكون قادر علىنسخ الملفات بستخدام scp الى جهاز اخر عن بعد دون الحاجة الى استخدام كلمة سر. فليكن هذا اختبار وهي بمحاولة تطبيق أول مثال مرة أخرى. انسخ ملف اسمه xyz.tgz من الجهاز الخاص بك الى المجلد tmp/ على الجهاز bozo :

scp xyz.tgz root@bozo:/tmp

نجحت – مع انها لم تطلب كلمة السر!

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

الآن الجزء الممتع. دعنا نكتب نص قصير لنسخ ملف يدعا هوديني من جهاز الى مجلد tmp/ موجود على عشرة اجهزة ، التي تقع في عشر مدن مختلفة ، في خمس دقائق فقط من العمل. وبطبيعة الحال ، فانها ستعمل بنفس الفعالية سواء مع 100 او 1000 من أجهزة الكمبيوتر الشخصي. على فرض ان اجهزة الكمبيوتر الـ 10 وتدعا بروكلين ، اوشكوش ، باريس ، بكين ، وينسلو ، ريو ، جنومي ، ميامي ، ومنسك ، وطوكيو. واليك النص :

 
#!/bin/sh
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk
tokyo
do
scp houdini root@$CITY:/tmp
echo $CITY " is copied"
done

انها تعمل كالسحر. وتمشيا مع صدى في هذا النص ، يجب ان تكون قادر على مراقبة كلما انتهى من النسخ لمدينة واحدة بعد أخرى.

بالمناسبة ، اذا كنت جديدا على كتابه الشل ،تجد هنا برنامج تعليمي رائع.

وكما تعلمون ، scp هو جزء واحد فقط من نطاق واسع بكثير لبرنامج ssh. واليك الجزء الرائع : عندما كنت تتبع الخطوات الستة المذكورة اعلاه ، أنت أيضا اكتسبت القدرة على الجلوس امام الكمبيوتر الخاص بك وتنفذ اي امر تريد على اي من اجهزة الكمبيوتر البعيدة عنك – من دون كلمة سر ، بطبيعة الحال. واليك مثال بسيط لاظهار التاريخ والوقت على جهاز كمبيوتر بروكلين :

ssh brooklyn "date"

دعنا الآن لنضع المفاهيم التالية معا في محاولة جادة واخيرة من أجل انشاء ملف نصي. انة من السيء عمل نسخ احتياطي لجميع الاجهزة على الشبكة . على سبيل المثال النسخ الاحتياطي للمجلد /home/ على جميع الاجهزة هي طريقة بدائية مقارنة مع قدرات ومرونة البرامج التجارية في هذا الخصوص ، ولكن لا يمكنك ان تتغلب على الاسعار الباهضة لهذه البرامج .وبالنظر في حقيقة ان معظم البرامج التجارية للنسخ الاحتياطي تتعامل على اساس رسوم الترخيص عن كل نسخة للبرنامج على كل جهاز. اذا كنت تستخدم هذه المجموعة ، بدلا من دفع رسوم الترخيص 100 لدعم الحواسيب الشخصيه عن بعد ، يمكنك ان تستعمل ملف نصي لعمل نسخة احتياطية لاجهزة الكمبيوتر من 100 جهاز كمبيوتر محلي واحد. بعد ذلك ، نسخة احتياطيه للكمبيوتر الخاص بك باستخدام نسخة تجارية وبهذا توفر رسوم الترخيص 99 جهاز من الاجهزة على الشبكة. على أي حال ، وفيما يلى النص يدل على المفاهيم ، بحيث يمكنك ان تكتب النص بنفسك لتناسب الحاله الخاصة بك. ببساطة ضع هذا النص في cron على الكمبيوتر الخاص بك ؛ لا يلزم النص على الحواسيب الشخصيه الاخرى. الرجاء قراءة التعليقات بعناية ، لأنها تفسر كل شيء انت بحاجة الى معرفته :

#!/bin/sh
 
# Variables are upper case for clarity
 
# before using the script you need to create a dir called '/tmp/backups'
on each
# remote box & a dir called '/usr/backups' on the local box
 
 
# on this local PC
# Set the variable "DATE" & format the date cmd output to look pretty
#
DATE=$(date +%b%d)
 
# this 'for loop' has 3 separate functions
 
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk
tokyo
do
 
# remove tarball on remote box from the previous time the script ran #
to avoid filling up your HD
# then echo it for troubleshooting
#
ssh -1 $CITY "rm -f /tmp/backups/*.tgz"
echo $CITY " old tarball removed"
 
# create a tarball of the /home dir on each remote box & put it in
/tmp/backups
# name the tarball uniquely with the date & city name
#
ssh $CITY "tar -zcvpf /tmp/backups/$CITY.$DATE.tgz /home/"
echo $CITY " is tarred"
 
# copy the tarball just create from the remote box to the /usr/backups
dir on
# the local box
#
scp root@$CITY:/tmp/backups/$CITY.$DATE.tgz /usr/backups
echo $CITY " is copied"
 
 
done
# the rest of the script is for error checking only, so it's optional:
 
# on this local PC
# create error file w todays date.
# If any box doesn't get backed, it gets written to this file
#
touch /u01/backup/scp_error_$DATE
 
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk
tokyo
 
do
 
# Check if tarball was copied to local box. If not write to error file
# note the use of '||' which says do what's after it if what's before it
is not # true
#
ls /u01/backup/$CITY.$DATE.tgz || echo " $CITY did not copy" >>
scp_error_$DATE
 
 
# Check if tarball can be opened w/o errors. If errors write to error file.
tar ztvf /u01/backup/$CITY.$DATE.tgz || echo "tarball of $CITY is No
Good" >> scp_error_$DATE
done
 

في هذه الموضوع ، حاولت اعطاء الامثله التي تبرهن على مفاهيم ليست بالضروره جاهزه للاستخدام “كما هي”. بعض من التركيب قد لا تعمل على بعض التوزيعات ، ولكن توخيا للايجاز ، لا يمكنني أن اشمل كل الاحتمالات. فعلى سبيل المثال ، اذا كنت تستخدم ردهات 6،2 أو قبل ذلك ، التركيب يحتاج الى بعض التغييرات. لذ كن فطن ، وأمل ان تتمكن من استخدام بعض هذه الاعمال في البيئة الخاصة بك.

docs/scp.txt · آخر تعديل: 2015/04/23 03:20 بواسطة 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki