سنستعرض في هذا المقال شرحًا معمقًا لبروتوكول النسخ الآمن وكيفية استخدامه وصيغة الأمر الخاص به وبعض الأمثلة على ذلك، إذ يُستخدم الأمر SCP باختصار على أنه طريقةٌ آمنة وسهلة لنقل الملفات بين أجهزة الحاسوب عبر خدمة الصدفة الآمنة Secure Shell -أو اختصارًا SSH.
ما هو بروتوكول النسخ الآمن SCP؟
برتوكول SCP هي اختصار لبروتوكول النسخ الآمن Secure Copy Protocol، الذي يساعدنا في نقل الملفات بين مضيفٍ محلي ومضيف بعيد، ويتشابه بعض الشيء مع بروتوكول نقل الملفات File Transfer Protocol -أو اختصارًا FTP- لكن يضيف عليه الأمان والاستيثاق.
يعمل SCP على المنفذ رقم 22، ويصطلح البعض بأنه دمجٌ بين BSD RCP وبروتوكول SSH؛ إذ يُستخدم بروتوكول RCP لنقل الملفات؛ ويوفِّر وبروتوكول SSH الاستيثاق والتشفير، لهذا يُعد SCP مزيجًا بين هذين البروتوكولين.
تكون البيانات المُرسلة عبر بروتوكول SCP موثوقة، لذا يمكن استخدامه لإعاقة التنصت على الحزم عبر الشبكة Packet Sniffing، والذي يُمكّن المتنصت من استخراج معلومات قيّمة من حزم البيانات.
يستفيد بروتوكول SCP من SSH، الذي يسمح بالتضمين والحفاظ على الأذونات والعلامات الزمنية للملفات المرفوعة.
كيفية استخدام بروتوكول SCP
يمكن للعميل SCP رفع الملفات إلى خادم SSH أو طلب تنزيل الملفات والمجلدات منه، إذ يرسل الخادم بدوره كل الملفات والمجلدات الفرعية المُتاحة للتنزيل.
يجب الانتباه إلى أن الخادم يتحكم بعملية تنزيل الملف، لذا يمكن أن يكون هناك مخاطر أمنية في حال اتصل العميل بخادمٍ مشبوه.
أمر SCP هو أمرٌ أصليٌ متواجدٌ ضمن معظم أنظمة التشغيل، مثل ماك وويندوز ولينكس، إذ يمكنك كتابة "scp" ضمن الطرفية للوصول إليه، وستجد الأمر أيضًا ضمن التطبيقات الشائعة لنقل الملفات عبر الشبكة، مثل تطبيق PuTTy.
أمر النسخ CP و SCP لنفهم الفرق بينهما
إذا استخدمت سابقًا الأمر "cp" على جهاز بنظام لينكس، فلن تجد صعوبةً في فهم SCP؛ إذ يتطلب كلا الأمرين وجود مكان مصدر ووجهة ضمن نظام الملفات لإتمام عملية النسخ؛ ويتمثّل الفرق الأساسي بينهما في أن SCP يتطلب أن يكون أحد أو كلا المكانين على نظامٍ بعيد.
مثلًا عند تطبيق الأمر cp في المثال التالي:
cp /main/john/pictures/picture*.png /main/john/archive
سيهيء الأمر السابق عملية النسخ، إذ ستُنسَخ كافة الملفات، التي يبدأ اسمها بكلمة "picture" وينتهي باللاحقة "png." ضمن المجلد "pictures" الواقع ضمن المجلد الرئيسي للمستخدم john، إلى المجلد "archive" الواقع ضمن المجلد "main".
يمكن تنفيذ نفس العملية باستخدام الأمر SCP على النحو التالي:
scp /main/john/pictures/picture*.png john@myhost.com:/main/john/archive
كما هو موضحٌ في المثال، عند استخدام الأمر SCP مع اسم تسجيل الدخول john؛ ستُرفع نفس الملفات إلى الخادم myhost.com وتحديدًا إلى المجلد البعيد ضمنه بالمسار "main/john/archive/"؛ وسيسمح SCP ببدء عملية الرفع فقط عندما يقدِّم المستخدم john كلمة المرور الخاصة به لذلك الخادم.
يمكننا أيضًا تحديد مكانٍ بعيد على أنه مصدرٌ للملفات؛ إذ يمكننا مثلًا تنزيل تلك الملفات الموجودة على الخادم "myhost.com" والتي يبدأ اسمها بكلمة "picture" وينتهي باللاحقة "png."، إلى المسار المحلي "main/john/downloads/"، على النحو التالي:
scp john@myhost.com:/main/john/archive/picture*.png /main/john/downloads
استخدام SCP على مكانٍ بعيد
يمكن أيضًا تحديد مضيف بعيد على أنه مصدرٌ ووجهةٌ بآنٍ معًا، إذ يمكن باستخدام الأمر التالي مثلًا نقل الملف من مجلدٍ موجودٍ على myhost.com إلى مجلدٍ آخر موجودٍ ضمن نفس الخادم.
scp someuser@myhost.com:/main/someuser/dira/file.txt someuser@myhost.com:/main/someuser/dirb
يمكن استخدام SCP في حالةٍ أخرى لنقل الملفات من مضيفٍ إلى مضيفٍ آخر مختلف باستخدام الأمر التالي:
scp user@host1.com:/onedir/file.txt user@host2.com:/otherdir
تذكر أن الملفات المنقولة عبر SCP محميةٌ ومشفرةٌ مثل SSH و SFTP.
صيغة الأمر SCP
قبل شرح طريقة عمل الأمر SCP لنتعرف على صيغة الأمر الأساسية، وهي:
scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]SRC_host:]file1 ... [[user@]DEST_host:]file2
معرفتك للأمر SCP وطريقة عمله هي البداية فقط، إذ أن هناك كثيرٌ من الخيارات المختلفة للأمر SCP يمكننا الاختيار منها، وسنتعمق في هذا القسم في فهم طريقة عمله.
لقطات الشاشة التالية هي للأمر SCP من طرفيةٍ على نظامي ويندوز وماك، إذ يختلف خرج الأمر بحسب نظام التشغيل.
خرج الأمر ويندوز على ويندوز
خرج الأمر على نظام ماك
-
[12346BCpqrv-]
- 1: وهو إصدار قديم للبروتوكول، يخبر البرنامج باستخدام بروتوكول SCP بالإصدار رقم 1.
- 2: كما في الخيار السابق، وهو بروتوكول قديم يخبر الأمر SCP باستخدام البروتوكول بالإصدار رقم 2.
- 3: ينقل البيانات بين مضيفين بعيدين عبر المضيف المحلي؛ إذ ستُنقل البيانات بين المضيفين البعيدين مباشرةً وبدون هذا الخيار. يمكن استخدام هذا الخيار أيضًا لإلغاء تفعيل شريط التقدُّم.
- 4: يخبر هذا الخيار SCP باستخدام العناوين من نوع IPv4 فقط.
- 6: يخبر هذا الخيار SCP باستخدام العناوين من نوع IPv6 فقط.
- B: يخبر هذا الخيار SCP بعدم الاستيثاق من الجلسة من خلال سؤال المستخدم عن كلمة المرور، ويتطلب ذلك ضمنيًا أن تكون طريقة الاستيثاق المحددة غير تفاعلية.
- C: يفعِّل هذا الخيار ضغط الاتصال المشفر وذلك عبر تضمين الراية "C-" ضمن SSH.
- [c cipher-]: يحدد هذا الخيار طريقة تشفير البيانات المنقولة، إذ تُمرّر تلك الطريقة إلى جلسة SSH مباشرةً.
- [F ssh_config-]: يمكن باستخدام هذا الخيار تحديد ملف ضبط SSH خاص لكل مستخدم، ويُرسل إلى SSH مباشرةً.
- [i dentity_file-]: يسمح هذا الخيار بتحديد المعرّف (المفتاح) للاستيثاق RSA، ويُمرَّر إلى SSH مباشرةً.
- [I limit-]: يحدد هذا الخيار السقف الأعلى لعرض الحزمة المستخدم بالوحدة كيلوبت بالثانية Kbps.
-
[o sshoption-]: يمكن تطبيق هذا الخيار لتمرير الخيارات إلى SSH باستخدام نفس صيغة sshconfig. ويُفضَّل تمرير الخيارات التي لا يوجد لها خيارٌ مماثلٌ ضمن خيارات الأمر SCP. بعض الخيارات المتاحة:
- AddressFamily: يمكن لهذا الخيار إعداد متطلبات العنوان IP، بحيث يمكن أن تكون عائلة العناوين إما IPv4، أو IPv6.
- Batch-mode: يمكننا استخدام هذا الخيار لتعطيل كل الاستعلامات عن مُدخلاتٍ من المستخدم، أي ستصبح طرق الاستيثاق التفاعلية مع المستخدم غير مدعومة عند تطبيق هذا الخيار. المعاملات المسموحة لهذا الخيار هي "yes" أو "no"، والقيمة الافتراضية هي "no".
- BindAddress: يمكننا من خلال هذا الخيار استخدام العنوان المحدد على الجهاز المحلي مثل عنوان مصدر، إذ يفيد هذا الخيار فقط في حال كان النظام يملك عدة عناوين. يفضل إبقاء هذا العنوان معطلًا في حال تفعيل "UsePrivilegedPort".
- CheckHostIP: عند تعيين قيمته إلى "yes" (وهي القيمة الافتراضية)، سيتحقق SSH من وجود عنوان IP للمضيف ضمن ملف known_hosts، وبهذا يتمكن SSH من التحقق فيما إذا جرى أي تعديلٍ لمفتاح المضيف في حالة وجود انتحالٍ لخادم DNS، ولن يحدث هذا التحقق في حال كانت القيمة "no".
- Ciphers: يحدد هذا الخيار عدة خوارزميات تشفير مفصولٌ بينها بفاصلة، ومدعومةٌ من قبل العميل، وتُستخدم طريقة التشفير الأعلى بحسب ترتيب تفضيل العميل والمدعومة من قبل الخادم للجلسة الحالية. طرق التشفير المدعومة هي: "aes128-ctr" و "aes128-cbc" و "aes192-ctr" و "aes192-cbc" و "aes256-ctr" و "aes256-cbc" و "blowfish-cbc" و "arcfour" و "arcfour128" و "arcfour256" و "cast128-cbc" و "3des-cbc"؛ ويمكنك تعيين القيمة أيضًا إلى "none"، ولكن لن تُشفَّر البيانات بهذا الخيار، لذا لا يُفضَّل استخدام تلك القيمة لأنها لن تقدم حمايةً موثوقة.
- من خيارات SSH المتاحة أيضًا: Compression و CompressionLevel و ConnectionAttempts و ConnectTimeout و IdentityFile و IdentitiesOnly و KexAlgorithms وغيرها الكثير.
- P port- يحدّد هذا الخيار رقم المنفذ المُراد الاتصال به على المضيف البعيد. يجب التفريق بين هذا الخيار بحرف P كبير وخيار بحرف p صغير مختلف آخر.
- p- يسمح هذا الخيار بالحفاظ على خصائص الملف الأصلي، مثل أوقات الوصول، وأوقات التعديلات، والأوضاع modes.
- q- يمكن استخدام هذا الخيار لإلغاء تفعيل شريط التقدم.
- r- يمكن استخدام الخيار لنسخ كل المجلدات الفرعية.
- S program- يحدد هذا الخيار البرنامج المُستخدم للاتصال المشفر، ومن الضروري أن يكون البرنامج المُحدّد قادرًا على فهم خيارات SSH.
- v- يفعِّل هذا الخيار وضع الإسهاب verbose، الذي يجبر الأوامر SCP و SSH على إظهار رسائل التصحيح عن تقدم العملية، إذ تفيد تلك الرسائل خلال عملية تحديد مشاكل الاتصال، أو مشاكل الإعدادات الخاطئة.
أمثلة عن الأمر SCP
سنذكر بعض الأمثلة عن استخدامات أمر SCP لمزيدٍ من التوضيح والفهم. تذكر بأن صيغة عنوان الملف تكون دائما كما يلي:
[user@host]host[:port][/path/file]
ينسخ الأمر التالي مثلًا الملف file.txt إلى المضيف البعيد "example.computeruser.com"، بحيث يكون اسم المستخدم الذي المُستخدم لتسجيل الدخول هو "user" على النحو التالي:
scp file.txt user@example.computeruser.com:file.txt
بينما ينسخ الأمر التالي كل الملفات ضمن المجلد "main/hope/" على المضيف البعيد "remotehost.com" إلى مسار العمل المحلي.
scp username@remotehost.com:/main/hope/*
سينسخُ الأمر التالي كل الملفات على المجلد البعيد "main/john/documents/" على الخادم "host.com" إلى المجلد المحلي "/main/john/downloads/documents/"، وسيشمل النقل كل المجلدات الفرعية مع ملفاتها.
scp -r john@host.com:/main/john/documents /main/john/downloads/documents
سينسخ الأمر التالي الملف البعيد "main/john/archive.zip/" على المضيف البعيد "host.com" إلى مسار العمل المحلي، وستُهيأ العملية للمستخدم "john"، ويُحدَّد الحد الأعلى للنقل إلى 200 كيلوبت بالثانية.
scp -l 200 john@host.com:/main/john/archive.zip
بينما ينسخ الأمر التالي الملف البعيد "files/file.zip/" على المضيف البعيد "1sthost.com" إلى المجلد البعيد أيضًا "archives/" على الخادم "2ndhost.com"، إذ سيُطلب إدخال كلمات المرور لكلٍ من الحسابات "john@1sthost.com" و "robert@2ndhost.com" على التوالي، وستُنقل الملفات مباشرةً بين المضيفين البعيدين.
scp john@1sthost.com:/files/file.zip robert@2ndhost.com:/archives
يشبه الأمر الأخير الأمر السابق، ولكن عوضًا عن نقل الملفات مباشرةً بين المضيفين البعيدين، ستُنقل الملفات عبر المضيف المحلي بينهما.
scp -3 john@1sthost.com:/files/file.zip robert@2ndhost.com:/archives
خلاصة
يُعدّ الأمر SCP بسيطًا لكنه قوي، إذ يوفّر نقلًا آمنًا للملفات بين المضيف المحلي والبعيد، وهو يشبه SFTP لأنه يعمل ضمن طبقة الجلسة ويستخدم المنفذ رقم 22.
الأمر SCP مبنيٌ على SSH وهو آمنٌ للغاية؛ فعلى عكس SFTP لا يمكن للأمر SCP عرض قائمة بالملفات الموجودة على الخادم البعيد أو حذفها؛ وعلى الرغم من عدم امتلاكه لتلك الميزة، لكنه يتميز بسرعة نقلٍ أعلى بكثير من SFTP.
يفيد هذا الأمر المستخدمين الذين يتعاملون مع بروتوكول SSH كثيرًا، ويوفر سرعة في النقل دون الحاجة للاهتمام بإدارة الخادم البعيد.
ترجمة -وبتصرف- للمقال "SCP – What is Secure Copy Protocol – Definition & Example" لصاحبه Marc Wilson.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.