RDP Monster

أمر scp في لينكس: نسخ الملفات من وإلى VPS (rsync وsftp)

أمر scp في لينكس: نسخ الملفات من وإلى VPS (rsync وsftp)

أمر scp في لينكس: الصيغة وعمليات النقل الأساسية

ينسخ scp (النسخ الآمن) الملفات بين الأجهزة عبر SSH، لذا فإن المستخدم والمفتاح والمنفذ التي تعمل مع ssh تعمل مع scp. والصيغة دائماً scp [options] SOURCE DESTINATION، ويُكتب الطرف البعيد أياً كان على هيئة user@host:path. وهو يحتاج إلى تسجيل دخول SSH فعّال؛ فإن كان المنفذ 22 لا يستجيب بعد، فابدأ بـتفعيل SSH على أوبونتو وتأمينه.

1. من الجهاز المحلي إلى الخادم (رفع)

scp backup.tar.gz user@SERVER_IP:/home/user/
scp backup.tar.gz user@SERVER_IP:~/backups/renamed.tar.gz
scp *.conf user@SERVER_IP:~/nginx-conf/

المسار المنتهي بشرطة مائلة يضع الملف داخل ذلك المجلد باسمه الأصلي؛ أما المسار الكامل فيعيد تسميته عند الوصول. ويمكن وضع عدة ملفات محلية قبل الوجهة ما دامت الوجهة مجلداً، ويجب أن يكون ذلك المجلد موجوداً مسبقاً: فـ scp لا ينشئ المجلدات الأب.

2. من الخادم إلى الجهاز المحلي (تنزيل)

scp user@SERVER_IP:/var/log/nginx/access.log .
scp user@SERVER_IP:'/var/log/nginx/*.log' ./logs/

النقطة تعني «هنا، بالاسم نفسه». ضع أحرف البدل الخاصة بالطرف البعيد بين علامتي اقتباس كي لا يوسّعها الصدفة المحلية لديك. والنسخ بين خادمين بعيدين ممكن أيضاً: scp -3 user@HOST_A:/data/dump.sql user@HOST_B:/data/ يوجّه النسخ عبر جهازك، فلا يحتاج إلى بيانات اعتماد الخادمين سوى جهازك.

3. المجلدات باستخدام -r

scp -r ./site user@SERVER_IP:/var/www/
scp -r user@SERVER_IP:/etc/nginx ./nginx-backup

ينسخ -r مجلداً وكل ما بداخله. الأمر الأول ينشئ /var/www/site على الخادم؛ والثاني ينزّل شجرة nginx كاملة إلى مجلد محلي. وتُنسخ الروابط الرمزية كملفات عادية، وهذا أحد أسباب كون rsync الأداة الأفضل لأشجار النظام الكاملة.

خيارات scp التي ستستخدمها فعلاً: ‎-P و‎-i و‎-C و‎-p

scp -P 2222 file.txt user@SERVER_IP:/home/user/        # non-default SSH port
scp -i ~/.ssh/id_ed25519 file.txt user@SERVER_IP:~/     # use a specific key
scp -C dump.sql user@SERVER_IP:~/                       # compress in transit
scp -rp ./site user@SERVER_IP:/var/www/                 # keep times and modes

خيار المنفذ هو -P الكبيرة. أما -p الصغيرة فتعني «الحفاظ على أوقات التعديل والوصول وبتات الأذونات»، ولأن ssh نفسه يستخدم -p للمنفذ، فإن الخلط بينهما هو أشهر أخطاء scp. ولتتوقف عن تكرار المنفذ والمفتاح في كل أمر، عرّف المضيف مرة واحدة في ~/.ssh/config؛ فـscp وrsync وsftp تقرأه جميعاً:

Host vps
    HostName SERVER_IP
    User user
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

خياران إضافيان: -l 8000 يحدّ النقل عند 8000 كيلوبت/ثانية (نحو 1 ميغابايت/ثانية)، و-v يُظهر المفاتيح المعروضة عند فشل المصادقة. ومنذ OpenSSH 9.0 صار scp ينقل عبر بروتوكول SFTP في الخلفية؛ الصيغة لم تتغير، لكن حيل الصدفة المضمّنة في مسار بعيد (استبدال الأوامر مثلاً) لم تعد تُنفَّذ على الخادم، ويعيد -O البروتوكول القديم من أجل خادم قديم جداً يرفض الوضع الجديد.

rsync: المزامنة والنقل القابل للاستئناف والاستثناءات

ينسخ rsync ما تغيّر فقط. التشغيل الأول يشبه scp -r؛ أما التشغيلات اللاحقة فتقارن الطرفين وترسل الفروق فحسب: الملفات الجديدة، ومن الملفات المعدّلة الكتل المتغيرة وحدها. وهذا ما يجعله أداة عمليات النشر والنسخ الاحتياطي وكل ما هو كبير. ويجب أن يكون مثبتاً على الطرفين (sudo apt install rsync)؛ فبعض الصور المصغّرة والحاويات لا تتضمنه.

1. الأمر اليومي

rsync -avz --progress ./site/ user@SERVER_IP:/var/www/site/
rsync -avz --progress user@SERVER_IP:/var/www/site/ ./site-backup/

-a (الأرشفة) يعادل -rlptgoD: النزول في المجلدات، والإبقاء على الروابط الرمزية كما هي، والحفاظ على الأذونات والأوقات والمجموعة والمالك وملفات الأجهزة؛ ولا تُحفظ الملكية إلا إذا كان الطرف المستقبِل يعمل بصلاحية root. و-v يسرد الملفات، و-z يضغط، و--progress يعرض كل ملف.

الشرطة المائلة النهائية مهمة. فـ./site/ تعني «محتوى المجلد site»، بينما ./site تعني «المجلد نفسه»، وهو ما سينشئ /var/www/site/site. وعند الشك، أضف -n (--dry-run) واقرأ قائمة الملفات قبل كتابة أي شيء.

2. نسخة مطابقة باستخدام --delete

rsync -avzn --delete ./site/ user@SERVER_IP:/var/www/site/   # dry run first
rsync -avz --delete ./site/ user@SERVER_IP:/var/www/site/

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

3. استثناء الملفات

rsync -avz --exclude='node_modules/' --exclude='.git/' --exclude='*.log' ./app/ user@SERVER_IP:/srv/app/
rsync -avz --exclude-from='.rsyncignore' ./app/ user@SERVER_IP:/srv/app/

الأنماط نسبية إلى جذر عملية النقل؛ والشرطة المائلة في البداية تثبّتها، فـ/config.php تستثني الملف الموجود في المستوى الأعلى فقط. و--exclude-from يقرأ نمطاً واحداً في كل سطر.

4. استئناف نقل غير مكتمل، ومنفذ ومفتاح مخصصان

rsync -avP -e 'ssh -p 2222 -i ~/.ssh/id_ed25519' ./disk.img user@SERVER_IP:/backup/

-P اختصار لـ--partial --progress: إذا انقطع الاتصال يُحتفظ بالملف الجزئي، وإعادة تشغيل الأمر نفسه تُكمل من حيث توقف. وتُمرَّر خيارات SSH عبر -e، والمنفذ هنا هو -p الصغيرة لأنه خيار ssh لا خيار rsync؛ وإدخال Host في ~/.ssh/config يلغي الحاجة إلى سلسلة -e كلها.

sftp: نقل تفاعلي عبر تسجيل دخول SSH نفسه

يمنحك sftp موجّه أوامر بأسلوب FTP فوق SSH، وهو مفيد للتصفح قبل النسخ.

sftp -P 2222 -i ~/.ssh/id_ed25519 user@SERVER_IP
sftp> ls -l /var/www
sftp> lcd ~/Downloads
sftp> get /var/log/syslog
sftp> put -r ./site /var/www/
sftp> reget backup.iso
sftp> bye

الأوامر التي تبدأ بحرف l تعمل على جهازك (lcd وlls وlpwd)، والبقية تعمل على الخادم. وput -r وget -r ينسخان المجلدات، وreget وreput يستأنفان ملفاً منقطعاً، و!command ينفّذ أمر صدفة محلياً دون مغادرة الجلسة. وsftp -b commands.txt user@SERVER_IP يعيد تشغيل ملف من هذه الأوامر لمهام cron.

نسخ الملفات من ويندوز: scp في PowerShell وWinSCP

يتضمن ويندوز 10 (الإصدار 1809 وما بعده) وويندوز 11 عميل OpenSSH، لذا تتوفر scp وsftp وssh في PowerShell بالخيارات نفسها الموجودة في لينكس:

cd C:\Users\you\Projects
scp -P 2222 -i $HOME\.ssh\id_ed25519 .\site.zip user@SERVER_IP:/home/user/
scp -r user@SERVER_IP:/var/www/site $HOME\Downloads

تُحفظ المفاتيح في C:\Users\you\.ssh\ بجوار known_hosts، ويعمل ssh-keygen -R SERVER_IP هناك أيضاً. واستخدام مسارات نسبية بعد cd يتفادى أي التباس بين حرف القرص واسم المضيف. أما rsync فغير مضمّن؛ وأنظف طريقة للحصول عليه هي WSL: wsl rsync -avz /mnt/c/Users/you/site/ user@SERVER_IP:/var/www/site/.

وللواجهة الرسومية، WinSCP هو الخيار المعتاد: يدعم SFTP وSCP، ويوفر عرضاً بلوحتين مع السحب والإفلات، وأمر Synchronize فيه يقارب ما يفعله rsync --delete. وهو يتوقع المفاتيح بصيغة .ppk الخاصة بـ PuTTY ويعرض تحويل مفتاح OpenSSH عند اختياره. أما لما يُنشر بشكل متكرر، فسطر واحد من scp أو rsync داخل سكربت أسهل في المراجعة والأتمتة.

scp مقابل rsync مقابل sftp: أيها تستخدم

المهمةالأداة الأنسبالسبب
ملف واحد مرة واحدةscpأقصر أمر، ولا شيء لتثبيته
مجلد، نسخة أولىscp -r أو rsync -aالنتيجة واحدة
عمليات نشر أو نسخ احتياطي متكررةrsyncلا تُرسَل سوى البيانات المتغيرة
نسخة مطابقة مع الحذفrsync --deletescp لا يستطيع حذف الملفات
استئناف ملف كبيرrsync -P أو reget في sftpscp يبدأ من الصفر
التصفح ثم اختيار الملفاتsftp أو WinSCPسرد تفاعلي
آلاف الملفات الصغيرةrsync أو tar عبر sshكلفة كل ملف تطغى على أداء scp
ويندوز بدون WSLscp في PowerShell أو WinSCPلا يوجد rsync أصلي

القاعدة العملية: scp حين تستطيع كتابة الأمر من الذاكرة، وrsync بمجرد أن تعرف أنك ستشغّله مرتين.

نصائح سرعة تُحدث فرقاً حقيقياً

  • الضغط ليس مجانياً. يقلّص -C (في scp) و-z (في rsync) حجم النصوص وملفات SQL والسجلات، لكنهما يهدران المعالج مع الأرشيفات والصور والفيديو. فإذا أظهر top أن sshd يستهلك 100% أثناء النقل، فاحذف الخيار.
  • اجمع الملفات الصغيرة الكثيرة. تطغى رحلات الذهاب والإياب لكل ملف عند رفع شجرة مصدرية؛ والتدفق الواحد أسرع: tar czf - ./site | ssh user@SERVER_IP 'tar xzf - -C /var/www/'.
  • جرّب خوارزمية تشفير أخرى على الوصلات السريعة. حين تكون عملية ssh نفسها هي عنق الزجاجة، فإن scp -c aes128-gcm@openssh.com يستخدم تعليمات AES المدمجة في كل معالج حديث تقريباً.
  • احمِ عمليات النقل الطويلة. شغّلها داخل tmux أو screen كي لا تُنهي جلسة منقطعة عملية النسخ، أو استخدم rsync -P وأعد التشغيل.
  • تحقّق وحدّد السرعة. يجب أن يتطابق sha256sum file على الطرفين؛ وscp -l أو rsync --bwlimit يمنع النسخ الاحتياطي من خنق التطبيق.

الأذونات والملكية والأخطاء الشائعة

Permission denied على مسار الوجهة

scp: /var/www//html/: Permission denied يعني أن تسجيل الدخول نجح لكن ذلك المستخدم لا يستطيع الكتابة هناك. انسخ إلى مجلدك الشخصي ثم انقل الملفات بـsudo mv، أو امنح المستخدم ملكية الوجهة (sudo chown -R user:user /var/www/site)، أو أضف مع rsync الخيار --rsync-path="sudo rsync"، وهو يعمل حين يملك مستخدم الدخول صلاحية sudo دون كلمة مرور، كما هو موضح في إنشاء مستخدم بصلاحيات sudo على لينكس. والرفع بحساب root يتجنّب الخطأ لكنه يخلّف ملفات مملوكة لـ root لا يستطيع خادم الويب الكتابة فيها: نفّذ sudo chown -R www-data:www-data /var/www/site بعدها.

Permission denied (publickey)

رفض الخادم المصادقة. تحقق من اسم المستخدم، وافرض المفتاح بـ-i، وأضف -v؛ وعلى الخادم الافتراضي يكشف sudo journalctl -u ssh -n 30 عن السبب.

Remote host identification has changed

هذا متوقع بعد إعادة تثبيت أو تغيير عنوان IP: مفتاح المضيف لم يعد يطابق ما في ~/.ssh/known_hosts. إن كنت قد أعدت بناء الخادم فعلاً، نفّذ ssh-keygen -R SERVER_IP ثم أعد الاتصال. وإن لم تفعل، فاعرف السبب قبل كتابة أي كلمة مرور.

No such file or directory

لا ينشئ scp المجلدات الأب: نفّذ أولاً ssh user@SERVER_IP 'mkdir -p /var/www/site'. أما rsync فينشئ آخر مكوّن من المسار فقط (--mkpath، في rsync 3.2.3 وما بعده، ينشئ المجلدات الأب).

rsync: command not found أو protocol data stream (code 12)

rsync غير موجود على أحد الطرفين؛ نفّذ sudo apt install rsync هناك وأعد المحاولة.

سكربتات مرفوعة ترفض العمل

الملفات القادمة من ويندوز لا تحمل بت التنفيذ وغالباً ما تحتوي على نهايات أسطر CRLF، وهو ما يُنتج bad interpreter: No such file or directory. عالج الأمرين بـchmod +x deploy.sh وsed -i 's/\r$//' deploy.sh؛ وجانب سطر الشيبانغ مشروح في ما هو ملف .sh وكيف ينفّذه bash. وخطأ كلاسيكي أخير: scp file.txt user@SERVER_IP بدون نقطتين بعد اسم المضيف هو نسخ محلي ينشئ بصمت ملفاً باسم user@SERVER_IP.

كل هذا يفترض خادماً تصل إليه عبر SSH بحساب root أو مستخدم sudo، حيث يكون النقل نفسه هو الحد لا حصة محددة. وخادم Linux VPS من rdp.monster هو من هذا النوع: صلاحية root كاملة، ومعالج وذاكرة مخصصان، وعرض نطاق غير محدود (ضمن الاستخدام العادل)، ودون KYC، مع قبول العملات المشفرة، ابتداءً من 8.99$ شهرياً، ويصبح الخادم متاحاً بعد نحو 10 ثوانٍ من تأكيد الدفع، فيكون أول ما تنفّذه عليه هو أمر scp من الخطوة الأولى.

الأسئلة الشائعة

هل أصبح أمر scp مهجوراً؟

لم يُحذف scp، لكنه منذ OpenSSH 9.0 ينقل الملفات عبر بروتوكول SFTP لأن بروتوكول scp الأصلي اعتُبر متقادماً.
وصف مطوّرو OpenSSH بروتوكول scp/rcp الأصلي بأنه متقادم ويصعب تأمينه، ومنذ OpenSSH 9.0 (عام 2022) صار أمر scp ينقل الملفات عبر SFTP. ولم تتغير الأداة ولا خياراتها ولا صيغة user@host:path، لذا تستمر السكربتات القائمة في العمل؛ ما يختلف فقط هو سلوك توسيع الصدفة داخل المسارات البعيدة، ويعيد -O البروتوكول القديم للخوادم التي تحتاجه. أما للأتمتة الجديدة فإن rsync أو sftp خياران أقدر، لكن scp نفسه مناسب تماماً للنسخ العرضي.

هل يمكنني استخدام scp بكلمة مرور بدل مفتاح SSH؟

نعم، إذا كان الخادم لا يزال يسمح بالمصادقة بكلمة مرور؛ فـ scp يطلبها تماماً كما يفعل ssh.
يستخدم scp أسلوب المصادقة نفسه الذي يستخدمه ssh مع ذلك المضيف. فإذا كان sshd مضبوطاً على PasswordAuthentication yes، طلب scp كلمة المرور ومضى النسخ؛ ولا يوجد خيار لتمرير كلمة المرور في سطر الأوامر، وأدوات مثل sshpass التي تفعل ذلك تتركها في سجل الأوامر لديك. وعادة ما تعطّل الخوادم المؤمَّنة الدخول بكلمة مرور، فيفشل scp عندها بالخطأ Permission denied (publickey) إلى أن تثبّت مفتاحاً بـssh-copy-id. والمفاتيح هي أيضاً ما يتيح للسكربتات العمل دون تدخل.

هل يستبدل scp الملفات الموجودة دون سؤال؟

نعم: يستبدل كل من scp وrsync ملفات الوجهة بصمت، لذا عاين النتيجة بـ rsync --dry-run عند الشك.
يستبدل scp أي ملف موجود بالاسم نفسه في الوجهة دون سؤال ودون خيار للتخطي. ويستبدل rsync أيضاً، لكن فقط حين يختلف المصدر، وهو يمنحك تحكماً: -n (--dry-run) يطبع ما سيتغير، و--ignore-existing يترك الملفات الموجودة دون مساس، و--update يتخطى الملفات الأحدث في الوجهة، و--backup --backup-dir=DIR يحتفظ بالنسخ المستبدلة. أما ما لا يمكن تعويضه فانسخه إلى مجلد جديد ثم بدّله بعد ذلك.

كيف أنسخ الملفات مباشرة بين خادمين VPS؟

إما تشغيل rsync أو scp على أحد الخادمين موجّهاً إلى الآخر، أو استخدام scp -3 لتمرير النسخ عبر جهازك.
أسرع طريق هو من خادم إلى خادم: ادخل عبر ssh إلى الخادم المصدر ونفّذ rsync -avz /data/ user@OTHER_IP:/data/ (أو scp -r) كي لا تمر البيانات عبر اتصالك المنزلي. ويتطلب ذلك أن يحمل الخادم الأول مفتاحاً يقبله الثاني. وإن كنت تفضّل عدم وضع مفاتيح على الخوادم، فإن scp -3 user@HOST_A:/path user@HOST_B:/path ينسخ عبر جهازك مستخدماً بيانات اعتمادك المحلية وحدها، مقابل تنزيل كل شيء ورفعه مرة واحدة.

Adrien Roche, محرر البنية التحتية والاستضافة

مهندس أنظمة بخبرة تزيد عن 10 سنوات في تشغيل أساطيل Windows Server وLinux. يدير أدريان وثائق البنية التحتية في rdp.monster ويكتب أدلتنا حول RDP واستضافة VPS وإدارة الخوادم والشبكات وأدوات الخصوصية.

سجّل في برنامج الموزعين لدينا

معلوماتك

إذا كان لديك أي سؤال، تواصل معنا بالضغط هنا !
الاسم(مطلوب)
أدخل عنوان بريدك الإلكتروني، ويجب أن يكون لديك حساب على dashboard.rdp.monster !

شركتك

أدخل عنوان موقعك الإلكتروني إن كان لديك موقع
اشرح بإيجاز كيف ستبيع خدماتنا لعملائك، مثلًا عبر الحديث مع الناس في المنتديات.

حتى الوحوش تحبّ الكوكيز!

نستخدم ملفات تعريف الارتباط لتحسين تصفّحك، ولعرض إعلانات أو محتوى مخصّص لك، ولتحليل حركة الزيارات على موقعنا. بالنقر على «قبول»، توافق على استخدامنا لملفات تعريف الارتباط.