نقل الملفات من جهاز بعيد إلى محلي باستخدام SCP

نقل الملفات من جهاز بعيد إلى محلي باستخدام SCP
Shell

نسخ الملفات بشكل آمن: دليل لاستخدام SCP

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

في هذا الدليل، سنرشدك خلال خطوات نسخ مجلد بعيد باسم "foo" إلى دليلك المحلي على /home/user/Desktop. سواء كنت تدير النسخ الاحتياطية، أو تنشر التعليمات البرمجية، أو تحتاج فقط إلى نقل الملفات، فإن فهم أوامر SCP سيجعل مهامك أسهل وأكثر كفاءة.

يأمر وصف
scp -r نسخ الدلائل بأكملها بشكل آمن من جهاز التحكم عن بعد إلى الجهاز المحلي.
paramiko.SFTPClient.from_transport() إنشاء عميل SFTP من وسيلة نقل SSH موجودة.
os.makedirs() ينشئ دليلاً بشكل متكرر، مما يضمن إنشاء جميع أدلة المستوى المتوسط.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) يضيف مفتاح مضيف الخادم تلقائيًا دون مطالبة، وهو مفيد للبرمجة النصية.
scp.listdir_attr() يسرد سمات الملفات الموجودة في الدليل، مما يتيح وظيفة النسخ العودي.
paramiko.S_ISDIR() يتحقق مما إذا كان المسار المحدد عبارة عن دليل، مما يساعد في النسخ العودي.
scp.get() نسخ ملف من الخادم البعيد إلى الجهاز المحلي.

شرح مفصل للبرامج النصية SCP

يوضح المثال النصي الأول استخدام scp -r أمر لنسخ دليل بعيد إلى جهاز محلي. ال scp الأمر، الذي يرمز إلى بروتوكول النسخ الآمن، هو أداة سطر أوامر تستخدم SSH لنقل الملفات بشكل آمن بين مضيف بعيد وجهاز محلي. ال -r تحدد العلامة الموجودة في الأمر أن العملية يجب أن تكون متكررة، مما يعني أنها ستنسخ جميع الملفات والأدلة الموجودة في الدليل المحدد. هيكل الأمر واضح ومباشر: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. هنا، user@remote_host يحدد المستخدم البعيد والمضيف، و /path/to/remote/folder و /home/user/Desktop/ هي مسارات المصدر والوجهة، على التوالي.

المثال الثاني هو برنامج نصي shell يقوم بأتمتة عملية SCP. يحدد هذا البرنامج النصي متغيرات للمستخدم البعيد والمضيف والمسارات، مما يسهل إعادة الاستخدام والتعديل. يستخدم البرنامج النصي scp -r ضمن برنامج Bash النصي لنقل الملفات، مما يساعد في السيناريوهات التي تتطلب عمليات نقل متكررة. ويتضمن أيضًا رسالة إعلام لإعلام المستخدم عند اكتمال عملية النقل. يستخدم المثال الثالث لغة Python مع مكتبة Paramiko، وهو أمر مفيد بشكل خاص لعمليات سير العمل الأكثر تعقيدًا أو الآلية. يقوم البرنامج النصي بإعداد عميل SSH ويستخدم paramiko.SFTPClient.from_transport() طريقة إنشاء جلسة SFTP. ثم يحدد وظيفة لنسخ الملفات بشكل متكرر من الخادم البعيد إلى الدليل المحلي باستخدام scp.listdir_attr() و paramiko.S_ISDIR() للتمييز بين الملفات والدلائل. يعد هذا الأسلوب مفيدًا لأولئك الذين يفضلون البرمجة النصية بلغة Python ويحتاجون إلى دمج وظيفة نقل الملفات في نصوص برمجية أكبر للأتمتة.

استخدام SCP لنقل الملفات من الخادم البعيد إلى الجهاز المحلي

برنامج Shell النصي لـ SCP

# Basic SCP command to copy a remote folder to a local directory
scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/

# Breakdown of the command:
# scp: invokes the SCP program
# -r: recursively copies entire directories
# user@remote_host:/path/to/remote/folder: specifies the user and path to the remote folder
# /home/user/Desktop/: specifies the local destination directory

# Example usage with real values:
scp -r user@example.com:/var/www/foo /home/user/Desktop/

أتمتة نقل SCP باستخدام برنامج Shell النصي

برنامج Shell النصي لأتمتة SCP

#!/bin/bash
# This script automates the SCP process

# Variables
REMOTE_USER="user"
REMOTE_HOST="remote_host"
REMOTE_PATH="/path/to/remote/folder"
LOCAL_PATH="/home/user/Desktop/"

# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}

# Notify user of completion
echo "Files have been copied successfully from ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} to ${LOCAL_PATH}"

برنامج Python النصي لنقل ملفات SCP

سكريبت بايثون باستخدام مكتبة باراميكو

import paramiko
import os

# Establish SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')

# SCP command
scp = paramiko.SFTPClient.from_transport(ssh.get_transport())

# Define remote and local paths
remote_path = '/path/to/remote/folder'
local_path = '/home/user/Desktop/'

# Function to recursively copy files
def recursive_copy(remote_path, local_path):
    os.makedirs(local_path, exist_ok=True)
    for item in scp.listdir_attr(remote_path):
        remote_item = remote_path + '/' + item.filename
        local_item = os.path.join(local_path, item.filename)
        if paramiko.S_ISDIR(item.st_mode):
            recursive_copy(remote_item, local_item)
        else:
            scp.get(remote_item, local_item)

# Start copy process
recursive_copy(remote_path, local_path)

# Close connections
scp.close()
ssh.close()
print(f"Files have been copied successfully from {remote_path} to {local_path}")

الاستخدام المتقدم لـ SCP: النصائح والحيل

أبعد من الاستخدام الأساسي ل scp لنسخ الملفات والأدلة، هناك العديد من التقنيات والخيارات المتقدمة التي يمكنها تحسين تجربة نقل الملفات لديك. إحدى الميزات المفيدة هي القدرة على تحديد النطاق الترددي المستخدم أثناء النقل، والذي يمكن أن يكون مفيدًا بشكل خاص عند العمل مع موارد الشبكة المحدودة. ويمكن تحقيق ذلك باستخدام -l خيار متبوعًا بحد النطاق الترددي بالكيلوبت في الثانية، على سبيل المثال، scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. خيار آخر مفيد هو -C العلم، الذي يتيح الضغط، مما قد يؤدي إلى تسريع عملية نقل الملفات الكبيرة.

يعد الأمان جانبًا مهمًا آخر يجب مراعاته عند الاستخدام scp. بينما scp يستخدم SSH بطبيعته لعمليات النقل الآمنة، وهناك خطوات إضافية يمكنك اتخاذها لتعزيز الأمان. على سبيل المثال، يمكن أن يؤدي استخدام مفاتيح SSH للمصادقة بدلاً من كلمات المرور إلى تحسين الأمان والراحة بشكل كبير. بالإضافة إلى ذلك، يمكنك تحديد منفذ SSH مختلف باستخدام الملف -P الخيار إذا كان الخادم الخاص بك لا يستخدم المنفذ الافتراضي 22. على سبيل المثال، scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ يسمح لك بالاتصال بخادم يقوم بتشغيل SSH على المنفذ 2222.

الأسئلة والأجوبة الشائعة حول SCP

  1. كيف يمكنني نسخ ملف من محلي إلى بعيد باستخدام SCP؟
  2. يمكنك استخدام scp local_file user@remote_host:/path/to/remote/directory.
  3. كيف يمكنني التحقق من تقدم عملية نقل SCP؟
  4. استخدم ال -v خيار لتمكين الوضع المطول: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. هل يمكنني الحفاظ على سمات الملف أثناء استخدام SCP؟
  6. نعم استخدم -p خيار للحفاظ على أوقات التعديل وأوقات الوصول والأوضاع: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. كيف يمكنني استخدام SCP مع مفتاح SSH مختلف؟
  8. حدد مفتاح SSH باستخدام -i خيار: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. كيف أتعامل مع عمليات نقل الملفات الكبيرة باستخدام SCP؟
  10. استخدم ال -C خيار الضغط و -l خيار الحد من عرض النطاق الترددي: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. كيف أنقل الملفات باستخدام SCP عبر منفذ SSH مختلف؟
  12. استخدم ال -P خيار تحديد المنفذ: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. هل يستطيع SCP التعامل مع الروابط الرمزية؟
  14. نعم -r سيقوم الخيار بنسخ الروابط الرمزية وكذلك الملفات والأدلة.
  15. ماذا يحدث إذا تمت مقاطعة نقل SCP؟
  16. أعد تشغيل scp الأمر لاستئناف النقل؛ فإنه سيتم تخطي الملفات التي تم نسخها بالفعل.
  17. كيف يمكنني استخدام SCP بكلمة مرور في البرنامج النصي؟
  18. يوصى باستخدام مفاتيح SSH بدلاً من ذلك، ولكن يمكنك استخدام أدوات مثل sshpass لمصادقة كلمة المرور في البرامج النصية.

الأفكار النهائية حول استخدام SCP

إن فهم كيفية استخدام SCP لنقل الملفات والأدلة من خادم بعيد إلى جهاز محلي يمكن أن يعزز بشكل كبير كفاءة سير العمل لديك. ومن خلال إتقان الأوامر الأساسية والتقنيات المتقدمة، يمكنك ضمان عمليات نقل آمنة وفعالة للبيانات. سواء كنت تقوم بنسخ ملفات فردية أو أدلة كاملة، أو أتمتة المهام باستخدام البرامج النصية، أو استخدام Python لعمليات أكثر تعقيدًا، يظل SCP أداة متعددة الاستخدامات وقوية لاحتياجات إدارة البيانات الخاصة بك.