بلاگ ابرفردوسی > آموزش سرور مجازی : آموزش دستور SCP در لینوکس با مثال‌های کاربردی

آموزش دستور SCP در لینوکس با مثال‌های کاربردی

آموزش دستور SCP

در مدیریت سرور، کارهای حساس باید در سریع‌ترین زمان و تحت امن‌ترین پروتکل‌ها انجام شوند و در این سناریوها، هیچ‌چیز به‌اندازه یک دستور خط فرمانی ساده و همه‌فن‌حریف مانند SCP در ترمینال کارساز نیست. دستور SCP (مخفف Secure Copy Protocol) یک ابزار خط فرمان در سیستم‌عامل‌های لینوکس و شبه‌یونیکس است که به شما اجازه می‌دهد فایل‌ها و دایرکتوری‌ها را به‌صورت کاملاً امن و رمزگذاری‌شده بین سیستم‌های مختلف منتقل کنید. ازآنجاکه این دستور بر پایه پروتکل SSH کار می‌کند، امنیت داده‌ها و احراز هویت کاربران در طول مسیر انتقال به‌طور کامل تضمین می‌شود.

در این مقاله به آموزش دستور SCP می‌پردازیم و به‌صورت کاملاً عملی، نحوه استفاده از آن را بررسی می‌کنیم. در ادامه یاد خواهید گرفت که چطور فایل‌ها را از لوکال به ریموت ارسال کنید، با چه ترفندی پوشه‌ها را به‌صورت بازگشتی (Recursive) انتقال دهید و چطور بدون نیاز به دانلود روی سیستم خود، فایل‌ها را مستقیم بین دو سرور مجازی جابه‌جا کنید. همچنین گزینه‌های مهم این دستور، پورت‌های سفارشی و خطاهای رایج پیکربندی را با هم عیب‌یابی خواهیم کرد.

دستور SCP در لینوکس چگونه کار می‌کند؟

وقتی برای اولین بار از دستور SCP در لینوکس برای جابه‌جایی فایل‌ها استفاده می‌کنید، همه‌چیز شبیه به دستور سنتی cp به‌نظر می‌رسد؛ با این تفاوت که این‌بار مقصد شما یک سیستم از راه دور (Remote) است. اما در پشت صحنه، فرایند انتقال بسیار دقیق‌تر و مهندسی‌شده‌تر از یک کپی ساده اتفاق می‌افتد.

سازوکار کلی انتقال داده بر پایه SSH

نقشه فرایند کارکرد دستور SCP

پروتکل امن انتقال فایل یا همان دستور SCP با SSH گره خورده است. این ابزار برای احراز هویت کاربران و رمزگذاری داده‌های درحال انتقال، کاملاً به تونل امن SSH تکیه می‌کند. به زبان ساده، فرایند کار به این ترتیب است:

  • برقراری ارتباط اولیه: کلاینت شما یک کانکشن SSH به سرور مقصد باز می‌کند.
  • احراز هویت: سرور از شما رمز عبور یا کلید خصوصی (SSH Key) می‌خواهد.
  • ایجاد بستر امن: پس‌از تایید هویت، یک تونل رمزگذاری‌شده شکل می‌گیرد تا داده‌ها در طول مسیر توسط هیچ شخص ثالثی شنود یا دستکاری نشوند.

تفاوت ابزار scp با پروتکل SCP که باید بدانید

یکی از نکات ظریفی که معمولاً در ادمین‌های باسابقه جلب توجه می‌کند، تفاوت میان ابزار خط فرمانی scp و پروتکل قدیمی SCP است. ابزاری که شما در ترمینال تایپ می‌کنید، صرفاً یک کلاینت است؛ اما پروتکل قدیمی SCP که در سال‌های گذشته استفاده می‌شد، ازنظر ساختار امنیتی چالش‌هایی داشت (مانند ضعف دربرابر حملات تزریق دستور ازطریق نام فایل‌ها).

به همین دلیل، توسعه‌دهندگان OpenSSH در نسخه‌های جدید (از نسخه ۸.۷ به بعد و به‌ویژه در توزیع‌های جدیدی مانند Red Hat 9 و Ubuntuهای جدید)، رفتار پیش‌فرض این ابزار را تغییر داده‌اند.

سوییچ -O در نسخه‌های جدید

در حال حاضر وقتی شما از ابزار scp استفاده می‌کنید، این دستور در پس‌زمینه از پروتکل SFTP برای انتقال فایل استفاده می‌کند تا امنیت بیشتری به شما بدهد. اما این تغییر رفتار یک چالش عملی ایجاد می‌کند: اگر بخواهید فایلی را به یک سرور قدیمی (Legacy) منتقل کنید که از SFTP پشتیبانی نمی‌کند، ارتباط شما قطع خواهد شد.

برای این مشکل مستندات man رسمی OpenSSH یک راهکار نجات‌بخش معرفی می‌کنند؛ استفاده از سوئیچ -O. این پارامتر به ابزار دستور می‌دهد که فورا لایه جدید را کنار بگذارد و از همان پروتکل قدیمی و سنتی SCP برای انتقال استفاده کند.

💡 ترفند کاربردی
اگر در شرکت‌تان با سرورهای قدیمی لینوکسی یا تجهیزات شبکه‌ای سروکار دارید که سال‌ها است آپدیت نشده‌اند، احتمالاً هنگام انتقال فایل با خطای عدم سازگاری مواجه می‌شوید. در چنین سناریوهایی، سوییچ -O (حرف بزرگ انگلیسی) مثل کلیدی مخفی است که ابزار را مجبور می‌کند به پروتکل نوستالژیک و قدیمی SCP سوئیچ کند و کارتان راه بیفتد.

پیش‌نیازهای استفاده از SCP

پیش‌نیازهای اجرای دستور SCP در لینوکس

قبل‌از اینکه ترمینال را باز کنید و اولین کامند را برای جابه‌جایی فایل‌ها بنویسید، بهتر است چند پیش‌نیاز ساده اما حیاتی را چک کنیم تا در همان ابتدای کار با خطاهایی مثل Connection refused یا Permission denied مواجه نشوید. برای استفاده از SCP، سیستم شما باید حداقل‌های لایه شبکه و دسترسی را داشته باشد.

چک‌لیست پیش‌نیازهای فنی برای اجرای بدون خطای کامند

برای اینکه فرایند کپی بدون سکته پیش برود، چهار مورد زیر را روی سیستم مبدا و مقصد بررسی کنید:

  • دسترسی SSH: ازآنجاکه این ابزار کاملاً با پروتکل SSH گره خورده است، باید مطمئن شوید دسترسی ریموت بین دو ماشین برقرار است.
  • اطلاعات احراز هویت: داشتن نام کاربری (Username)، آدرس IP یا دامنه سرور، به‌همراه رمز عبور یا کلید خصوصی (SSH Key) الزامی است.
  • نصب بودن OpenSSH: بسته نرم‌افزاری OpenSSH Server باید روی ماشین مقصد و OpenSSH Client روی ماشین مبدا نصب و فعال باشد.
  • تنظیمات فایروال: پورتی که برای ارتباط SSH استفاده می‌شود (به‌طور پیش‌فرض پورت ۲۲)، نباید در فایروال سیستم مسدود شده باشد.

جدول خلاصه‌ پیش‌نیازهای عملیاتی دستور SCP

پیش‌نیازلایه بررسیدلیل اهمیت در فرایند
دسترسی SSHشبکه / پروتکلبستر اصلی برای برقراری تونل امن انتقال داده‌ها
نام کاربری و IP/دامنهاحراز هویتشناسایی سرور مقصد و تعیین سطح دسترسی کاربر
پکیج OpenSSHنرم‌افزارابزار خط فرمان برای هندل کردن کلاینت و سرور
باز بودن پورت فایروالامنیت سیستمجلوگیری از لیمیت یا بلاک شدن ترافیک ورودی سرور
⚠️ هشدار خیلی مهم
بسیاری از کاربران لینوکس فراموش می‌کنند کاری که با دستور SCP در لینوکس انجام می‌شود، در نهایت وابسته به سطح دسترسی کاربر در سرور مقصد است. اگر قصد دارید فایلی را به مسیرهای حساسی مثل /var/www/html یا /etc منتقل کنید، کاربر شما حتماً باید مجوز نوشتن (Write Permission) در آن دایرکتوری را داشته باشد؛ در غیر این صورت با خطای Permission denied مواجه خواهید شد.

ساختار و سینتکس دستور SCP

اگر قبلاً با دستور سنتی cp برای کپی فایل‌ها در لوکال کار کرده باشید، درک ساختار این دستور برای شما مثل آب خوردن خواهد بود. منطق کلی این بخش بر پایه یک فرمول ساده استوار است: از کدام مبدا به کدام مقصد؟ فرمت کلی کامند در خط فرمان به شکل زیر است:

scp [options] source destination

کالبدشکافی اجزای اصلی دستور

ساختار خط فرمان بالا از سه بخش کلیدی تشکیل شده است:

  • [options]: سوئیچ‌ها و پارامترهای سفارشی (مثل تغییر پورت یا فشرده‌سازی) که رفتار کامند را تغییر می‌دهند.
  • source: مسیر فایل یا پوشه‌ای که قصد کپی کردنش را دارید (می‌تواند روی سیستم محلی یا سرور ریموت باشد).
  • destination: مسیر نهایی که فایل باید در آنجا جا خوش کند (این مورد هم می‌تواند لوکال یا ریموت باشد).

معرفی مهم‌ترین سوئیچ‌های کاربردی برای مدیریت انتقال داده

راهنمای سریع سوییچ‌های پرکاربرد SCP

برای اینکه بتوانید فرایند انتقال یا کپی فایل با SCP را متناسب با سناریوی خود شخصی‌سازی کنید، باید با چند سوئیچ پرکاربرد که در داکیومنت‌های منپیج روی آن‌ها تاکید شده آشنا باشید:

  • سوئیچ -r: برای کپی پوشه‌ها (دایرکتوری‌ها) به‌صورت بازگشتی همراه با تمام زیرپوشه‌ها و فایل‌های درون آن.
  • سوئیچ -P: اگر پورت SSH سرور مقصد را از حالت پیش‌فرض (22) تغییر داده‌اید، با این پارامتر (با P بزرگ انگلیسی) پورت جدید را ست می‌کنید.
  • سوئیچ -i: برای مواقعی که احراز هویت سرور را بر پایه SSH Key تنظیم کرده‌اید و نیاز دارید مسیر کلید خصوصی را به کامند معرفی کنید.
  • سوئیچ -C: فعال‌سازی فشرده‌سازی داده‌ها در طول مسیر؛ این ترفند تجربی سرعت انتقال فایل‌های متنی بزرگ را به‌شدت بالا می‌برد.
  • سوئیچ -3: برای زمانی که می‌خواهید فایلی را مستقیم بین دو سرور راه دور جابه‌جا کنید، اما ترافیک و فرایند انتقال ازطریق ماشین لوکال شما هدایت و پل‌سازی شود.
  • سوئیچ -O (سازگاری با سیستم‌های قدیمی): ابزار را مجبور می‌کند به جای لایه جدید SFTP، از همان لایه و پروتکل سنتی SCP استفاده کند.

در بخش‌های بعدی، نحوه ترکیب این سوییچ‌ها را در قالب مثال‌های کاربردی دستور SCP روی ترمینال بررسی خواهیم کرد تا دقیقاً دست‌تان بیاید که چطور در سناریوهای واقعی کار را پیش ببرید.

انتقال فایل از لوکال به سرور

رایج‌ترین سناریویی که در مدیریت روزمره سرور با آن سروکار خواهید داشت، فرستادن یک فایل از سیستم شخصی (ویندوز یا لینوکس) به یک سرور از راه دور است. آموزش دستور SCP در این حالت بسیار سریع و بدون نیاز به کلاینت‌های فرعی انجام می‌شود.

چگونه با دستور SCP فایل منتقل کنیم؟

در ساده‌ترین حالت، فرض کنید یک فایل متنی به نام config.txt در دایرکتوری فعلی سیستم خود دارید و می‌خواهید آن را به پوشه هومِ کاربر روت در سرور منتقل کنید. برای این کار، کامند زیر را در ترمینال سیستم لوکال خود تایپ می‌کنید:

scp config.txt root@192.168.1.10:/root/

مثال عملی انتقال فایل از لینوکس به سرور با SCP

در سناریوهای واقعی، معمولاً نیاز دارید فایل را به یک دایرکتوری خاص (مثل پوشه وب‌سرور) بفرستید یا حتی نام آن را درحین جابه‌جایی تغییر دهید تا فایل‌های قدیمی بازنویسی (Overwrite) نشوند.

  1. تعیین مسیر دقیق مقصد: برای فرستادن فایل زیپ پروژه به پوشه وب‌سرور اوبونتو، مسیر کامل را بعداز علامت دو نقطه (:) وارد می‌کنید:
scp project.zip sam@192.168.1.10:/var/www/html/
  1. تغییر نام فایل در مقصد: اگر بخواهید فایل backup.sql را به سرور بفرستید اما در مقصد نام آن به old_backup.sql تغییر کند، نام جدید را در انتهای مسیر مقصد اضافه می‌کنید:
scp backup.sql root@192.168.1.10:/root/old_backup.sql
باکس نکته وردپرس – راست‌چین
✨ نکته مهم
کاربرد علامت ~در آدرس‌دهی
اگر مسیر دقیق پوشه هوم کاربر را در سرور نمی‌دانید، نیازی نیست آدرس کامل مثل /home/username/ را تایپ کنید. لینوکس این چالش را ساده کرده است؛ کافی است بعداز دو نقطه از علامت مَد یا همان تِیلد (~) استفاده کنید تا دستور به‌صورت خودکار فایل را در پوشه هومِ آن کاربر آپلود کند:
scp theme.tar.gz user@ip:~

انتقال فایل از سرور به لوکال (دانلود فایل)

گاهی اوقات سناریو کاملاً برعکس می‌شود؛ شما یک اسکریپت بکاپ‌گیری روی سرور اجرا کرده‌اید یا می‌خواهید لاگ‌های خطای دیتابیس را برای بررسی دقیق‌تر به سیستم شخصی خود (لوکال) دانلود کنید. برای انتقال فایل از سرور به لوکال، منطق اصلی سینتکس هیچ تغییری نمی‌کند؛ ساختار دستور کماکان scp source destination است، اما این‌بار جای ماشین‌ها عوض می‌شود؛ یعنی مبدا شما روی سرور ریموت قرار دارد و مقصد، سیستم محلی شما است.

نمونه عملی دانلود فایل از سرور به سیستم محلی

تصور کنید فایلی به نام error.log در مسیر /var/log/nginx/ سرور قرار دارد و شما می‌خواهید آن را در پوشه Downloads کامپیوتر خود ذخیره کنید. در این حالت، ترمینال سیستم شخصی خود را باز کرده و کامند زیر را اجرا می‌کنید:

scp root@192.168.1.10:/var/log/nginx/error.log /home/local_user/Downloads/

دانلود فایل در دایرکتوری فعلی با ترفند نقطه‌گذاری

یکی از ترفندهای تجربی که سرعت کار شما را در ترمینال چندبرابر می‌کند، پرهیز از نوشتن مسیرهای طولانی محلی است. آموزش کپی فایل با SCP درحالت دانلود را باید اینطور توضیح دهیم که اگر از قبل در ترمینال لوکال خود وارد پوشه مقصد شده‌اید، نیازی به نوشتن آدرس طولانی ندارید. کافی است در انتهای دستور، به‌جای مسیر مقصد از یک کاراکتر نقطه (.) استفاده کنید:

scp root@192.168.1.10:/root/database_backup.sql .

این نقطه به سیستم می‌فهماند که فایل دانلودشده را دقیقاً در همین پوشه‌ای که اکنون ترمینال در آن باز است جاگذاری کند.

💡 نکته کاربردی
یک اشتباه کلاسیک در میان متخصصان شبکه این است که کامند بالا را به اشتباه درون محیط SSH سرور تایپ می‌کنند! به‌خاطر داشته باشید که برای دانلود فایل از سرور به لوکال، شما باید دستور را در ترمینال سیستم شخصی خودتان (جایی که به کلیدها یا اینترنت محلی دسترسی دارد) اجرا کنید نه درون نشستِ فعالِ SSH سرور.

آموزش انتقال پوشه با SCP

تفاوت ساختاری کپی پوشه با SCP

تا اینجا فرایند جابه‌جایی تک‌فایل‌ها را بررسی کردیم؛ اما در واقعیت معمولاً با دایرکتوری‌ها سروکار داریم؛ مثلاً می‌خواهید پوشه تصاویر وب‌سایت یا کل سورس‌کد یک پروژه پایتون را آپلود کنید. در آموزش دستور SCP برای انتقال پوشه، باید یک آپشن اختصاصی به نام سوئیچ بازگشتی (Recursive) را در لینوکس معرفی کنیم.

کاربرد سوئیچ -r و آپلود کامل یک دایرکتوری

اگر بدون استفاده از پارامترهای کمکی سعی کنید یک پوشه را منتقل کنید، ترمینال با خطای not a regular file به شما اعتراض خواهد کرد. راهکار حل این چالش، اضافه کردن سوئیچ -r (حرف کوچک) است که به سیستم دستور می‌دهد پوشه را همراه با تمام زیرپوشه‌ها و فایل‌های درون آن کپی کند.

  • فرستادن کامل پوشه به سرور: فرض کنید می‌خواهید پوشه‌ای به نام project را به سرور منتقل کنید:
scp -r /home/user/project root@192.168.1.10:/var/www/
  • با این دستور، خودِ پوشه project درون دایرکتوری /var/www/ سرور مجازی جا خوش می‌کند (مسیر نهایی: /var/www/project/).

کپی کردن محتویات پوشه (بدون کپی شدن خودِ پوشه اصلی)

گاهی اوقات نیازی ندارید که خود دایرکتوری اصلی کپی شود، بلکه می‌خواهید فقط فایل‌های داخل آن مستقیماً در دایرکتوری مقصد تخلیه شوند. برای این کار از علامت وایلدکارد یا همان ستاره (*) کمک می‌گیریم:

scp -r /home/user/project/* root@192.168.1.10:/var/www/html/

این دستور، تمام فایل‌ها و زیرپوشه‌های درون project را مستقیماً درون پوشه html سرور می‌ریزد، بدون اینکه پوشه‌ای به نام project در مقصد ساخته شود.

برتری ابزار rsync برای انتقال پوشه‌های حجیم

ازنظر آموزشی، ابزار scp در لینوکس برای پوشه‌های سبک و جابه‌جایی‌های سریع فوق‌العاده است. اما اگر قصد دارید فایل‌های حجیم چند ده گیگابایتی یا بکاپ‌های سنگین دیتابیس را جابه‌جا کنید، مستندات رسمی شرکت رد هت (Red Hat) یک نکته مهم را گوشزد می‌کنند: برای فایل‌های بزرگ، به‌جای SCP از ابزار rsync استفاده کنید.

چرا؟ چون SCP قابلیت رزومه (Resume) یا ادامه‌دادن دانلودهای قطع‌شده را ندارد؛ یعنی اگر در ۹۹ درصد انتقال فایل ۱۰ گیگابایتی شبکه شما قطع شود، باید همه‌چیز را از صفر شروع کنید! علاوه‌بر این، rsync فرایند بررسی تغییرات فایل‌ها (Delta-transfer) را بسیار هوشمندانه‌تر مدیریت می‌کند.

💡 ترفند کاربردی
دستور SCP تک‌تک فایل‌های درون پوشه را به‌صورت مجزا احراز هویت و رمزگذاری می‌کند. اگر پوشه پروژه شما حاوی هزاران فایل متنی ریز باشد (مثل پوشه node_modules در پروژه‌های جاوااسکریپت)، سرعت انتقال خیلی افت خواهد کرد. ترفند تجربی برای اجتناب از این گلوگاه این است که ابتدا پوشه را روی لوکال با دستور tar -czf زیپ کنید، فایل تک‌عنصریِ فشرده را با سرعت بالا بفرستید و در مقصد آن را اکسترکت کنید.

اجرای SCP بدون رمز عبور با SSH Key

اگر مدام در حال اجرای دستورات SCP در اسکریپت‌های خودکار (مثل کرون‌جاب‌های بکاپ‌گیری شبانه) هستید، وارد کردن دستی پسورد در هر بار اجرا هم غیرعملی است و هم یک ریسک امنیتی محسوب می‌شود. راه‌حل استاندارد این مشکل، جایگزین کردن رمز عبور با یک جفت کلید SSH (خصوصی و عمومی) است تا احراز هویت به‌صورت خودکار و بدون نیاز به دخالت انسانی انجام شود.

گام اول- ساخت جفت کلید SSH

روی سیستم مبدا (همان جایی که قرار است دستور scp را از آنجا اجرا کنید)، دستور زیر را در ترمینال وارد کنید:

ssh-keygen -t ed25519

(اگر سیستم‌عامل مقصد از الگوریتم جدیدتر ed25519 پشتیبانی نمی‌کند، می‌توانید از الگوریتم قدیمی‌تر و سازگارتر rsa استفاده کنید: ssh-keygen -t rsa -b 4096)

سیستم سه سؤال از شما می‌پرسد:

مسیر ذخیره‌سازی کلید: با زدن Enter، مسیر پیش‌فرض (~/.ssh/id_ed25519) را می‌پذیرید.

Passphrase (رمز عبور اضافی روی خود کلید): برای اسکریپت‌های کاملاً خودکار، این فیلد را خالی بگذارید و Enter بزنید؛ در غیر این صورت، هر بار استفاده از کلید یک رمز اضافه از شما خواسته می‌شود.

تکرار Passphrase: مشابه بالا.

پس‌از این مرحله، دو فایل ساخته می‌شود: id_ed25519 (کلید خصوصی، هرگز نباید آن را با کسی به اشتراک بگذارید) و id_ed25519.pub (کلید عمومی، همان چیزی که باید به سرور مقصد بفرستید).

گام دوم- انتقال کلید عمومی به سرور مقصد

ساده‌ترین روش، استفاده از ابزار اختصاصی ssh-copy-id است که کلید را به‌صورت خودکار در جای درست سرور مقصد قرار می‌دهد:

ssh-copy-id user@server_ip

سیستم یک‌بار آخرین‌بار رمز عبور سرور را از شما می‌خواهد تا هویتتان تأیید شود؛ پس‌از آن، کلید عمومی به‌صورت خودکار در فایل ~/.ssh/authorized_keys سرور مقصد اضافه می‌شود.

اگر ابزار ssh-copy-id روی سیستم شما (مثلاً روی ویندوز) در دسترس نبود، می‌توانید همین کار را به‌صورت دستی با ترکیب دستورات SSH و SCP انجام دهید:

scp ~/.ssh/id_ed25519.pub user@server_ip:~/temp_key.pub
ssh user@server_ip "mkdir -p ~/.ssh && cat ~/temp_key.pub >> ~/.ssh/authorized_keys && rm ~/temp_key.pub"

گام سوم- تست اتصال بدون رمز عبور

حالا کافی است دوباره یک دستور SCP معمولی اجرا کنید:

scp notes.txt user@server_ip:~

اگر همه‌چیز درست پیش رفته باشد، دیگر هیچ پرامپتی برای وارد کردن رمز عبور ظاهر نمی‌شود و انتقال فایل بلافاصله آغاز می‌شود.

چرا این روش برای اسکریپت‌نویسی حیاتی است؟

وقتی می‌خواهید یک اسکریپت Bash برای بکاپ‌گیری خودکار شبانه بنویسید که فایل را با SCP به یک سرور دیگر منتقل کند، اسکریپت شما نمی‌تواند پشت یک پرامپت رمز عبور منتظر بماند. احراز هویت مبتنی‌بر کلید SSH تنها راه استانداردی است که به این اسکریپت‌ها اجازه می‌دهد به‌طور کاملاً خودکار و بدون نظارت انسانی اجرا شوند.

انتقال فایل بین دو سرور با SCP

یکی از جذاب‌ترین و کاربردی‌ترین سناریوها برای ادمین‌های شبکه، انتقال فایل بین دو سرور با SCP است. مثلا وب‌سایت بزرگی دارید و یک سرور مجازی جدید خریده‌اید و حالا می‌خواهید دیتای سایت را مستقیم از سرور قدیمی (Server A) به سرور جدید (Server B) کپی کنید.

در این حالت نیازی نیست ابتدا فایل‌ها را روی کامپیوتر شخصی خودتان دانلود و دوباره آپلود کنید؛ ترمینال به شما اجازه می‌دهد از روی سیستم خود، فرمان انتقال مستقیم بین دو ماشین راه دور را صادر کنید.

سناریوی کپی مستقیم بین دو میزبان راه دور

فرمول این کار بسیار ساده است؛ شما در ترمینال کامپیوتر خودتان می‌نشینید و مشخصات هر دو سرور مبدا و مقصد را در یک خط ردیف می‌کنید:

scp userA@server_A_ip:/root/backup.tar.gz userB@server_B_ip:/home/userB/

پس‌از اجرای این دستور، ابتدا پسورد سرور مبدا و سپس پسورد سرور مقصد از شما خواسته می‌شود و فرایند کپی فایل با SCP مستقیم در پهنای باند دیتاسنتر انجام خواهد شد.

سوییچ نجات‌بخش -3 برای دور زدن محدودیت‌های فایروال

اگرچه کامند بالا در حالت عادی عالی کار می‌کند، اما یک چالش امنیتی وجود دارد: برای اینکه دستور بالا اجرا شود، سرور A باید بتواند به‌صورت مستقیم یک کانکشن SCP با SSH به سرور B باز کند. اما در ساختارهای شرکتی و امنیتی، معمولاً فایروال سرورها طوری تنظیم شده که ترافیک ورودی و خروجی به سرورهای ناشناس دیگر را کاملاً مسدود می‌کنند.

اگر دو سرور به‌دلیل محدودیت‌های فایروال نتوانند مستقیماً با یکدیگر مرتبط شوند، ارتباط قطع می‌شود. متخصصان برای این موقعیت‌ها سوئیچ -3 را معرفی می‌کنند:

scp -3 userA@server_A_ip:/root/backup.tar.gz userB@server_B_ip:/home/userB/

سوئیچ -3 چطور مشکل را حل می‌کند؟

وقتی از پارامتر -3 استفاده می‌کنید، فرایند انتقال به این صورت تغییر می‌کند:

  • سیستم دیتای فایل را از سرور A می‌خواند و به‌صورت موقت به ماشین محلی شما (لوکال) می‌آورد.
  • سپس بدون اینکه فایلی روی هارد شما ذخیره شود، همان دیتا را در لحظه به سرور B استریم و آپلود می‌کند.

فرایند انتقال با این روش کمی طولانی‌تر می‌شود (چون به پهنای باند اینترنت شما وابسته است)، اما قفل‌های فایروال شبکه را به‌طور کامل دور می‌زند.

باکس نکته وردپرس – راست‌چین
✨ نکته مهم
هنگام استفاده از سوئیچ -3 اگر احراز هویت سرورهای شما بر پایه SSH Key باشد، کامند به‌صورت خودکار از کلیدهای موجود روی سیستم لوکال شما برای باز کردن درِ هر دو سرور استفاده می‌کند و نیازی به کپی کردن کلیدهای خصوصی روی سرورهای ریموت نخواهید داشت.

خطاهای رایج دستور SCP و روش رفع آن‌ها

پیام خطا در ترمینالریشه اصلی اختلالاقدام فوری برای حل مشکل
Permission denied (text)نبود سطح دسترسی فایل/پوشهانتقال موقت به دایرکتوری /tmp یا اصلاح مالکیت پوشه با chown
No such file or directoryآدرس‌دهی اشتباه یا نبود دونقطهبررسی ساختار آدرس مطلق و اطمینان از قرارگیری کاراکتر : بعداز IP
Connection refusedمسدود بودن یا اشتباه بودن پورتبررسی فایروال سرور و ست‌کردن پورت سفارشی با سوئیچ -P
Permission denied (publickey)نام کاربری غلط یا اختلال کلیدبررسی صحت Username سرور و لیمیت کردن پرمیشن کلید با chmod 400
Protocol mismatch / dropآپدیت بودن OpenSSH مبدا و سرور قدیمیاجبار ترمینال به استفاده از پروتکل قدیمی با اضافه کردن سوئیچ -O

در مدیریت سرور، همه‌چیز همیشه شبیه به داکیومنت‌های اتوکشیده و بی‌نقص جلو نمی‌رود. کافی است یک دونقطه (:) را جا بیندازید یا مجوز یکی از پوشه‌ها تنظیم نباشد تا ترمینال با یک ارور قرمز یا مبهم، پهنای باندتان را قفل کند. در جریان آموزش کار با دستور SCP در لینوکس، شناخت این خطاها و راه‌حل‌های تجربی آن‌ها، مرز میان یک کارشناس تازه‌کار و یک ادمین حرفه‌ای است.

۱. خطای Permission Denied

این ارور معمولاً زمانی رخ می‌دهد که هویت شما تایید شده، اما لینوکس اجازه دسترسی به فایل یا پوشه مدّنظر را نمی‌دهد.

  • علت فنی: کاربر ریموت شما مجوز خواندن (Read) فایل مبدا یا مجوز نوشتن (Write) در دایرکتوری مقصد را ندارد.
  • عیب‌یابی: مطمئن شوید پوشه مقصد متعلق به همان کاربری است که با آن لاگین کرده‌اید. درصورت نیاز، ابتدا فایل را در پوشه /tmp آپلود کنید و سپس در محیط SSH با دستور sudo mv آن را به مقصد اصلی جابه‌جا کنید.

۲. خطای مسیر اشتباه (No such file or directory)

ترمینال پیام Lost connection یا No such file می‌دهد و فرایند پورت جابه‌جایی متوقف می‌شود.

  • علت فنی: یک اشتباه تایپی کوچک در مسیرهای مطلق (Absolute Paths) یا فراموش کردن علامت دونقطه (:) بعداز آی‌پی سرور.
  • عیب‌یابی: همیشه مسیرهای سرور مقصد را به‌صورت کامل و از روت (مثل /var/www/html/) بنویسید. فراموش نکنید که اگر دونقطه بعد از IP جا بیفتد، دستور SCP در لینوکس به‌جای انتقال فایل به سرور، فکر می‌کند می‌خواهید فایل را روی سیستم خودتان کپی کنید و نام فایل جدید را IP سرور بگذارد!

۳. مشکل پورت SSH و خطای Connection Refused

کامند را اجرا می‌کنید اما ترمینال برای چند ثانیه بوق ممتد سکوت می‌زند و سپس خطای اتصال می‌دهد.

  • علت فنی: پورت SSH سرور مقصد ۲۲ نیست یا فایروال دسترسی شما را مسدود کرده است.
  • عیب‌یابی: اگر پورت سرور تغییر کرده، حتماً از سوئیچ -P (با حروف بزرگ) استفاده کنید. همچنین با ابزار ping یا کامند telnet ip port مطمئن شوید که پورت سرور ابری یا مجازی مقصد از سمت شبکه شما باز است.

4. چالش تایید هویت و ارور Permission denied (publickey)

این خطا مستقیماً به لایه امنیتی مربوط است و اجازه ورود به لایه احراز هویت را نمی‌دهد.

  • علت فنی: نام کاربری را اشتباه تایپ کرده‌اید یا کلید خصوصی (SSH Key) شما توسط سرور پذیرفته نمی‌شود.
  • عیب‌یابی: نام کاربری سرور را چک کنید (مثلاً ubuntu یا root). اگر از کلید استفاده می‌کنید، مسیر دقیق کلید خصوصی را با سوئیچ -i معرفی کنید.

۵. مشکل سازگاری نسخه‌های جدید OpenSSH (تفاوت SCP/SFTP)

فایل منتقل نمی‌شود یا پیام عدم سازگاری لایه پروتکل (Protocol Mismatch) روی صفحه می‌آید.

  • علت فنی: طبق گزارش‌های یادداشت رسمی Red Hat، نسخه‌های جدید OpenSSH تمایل دارند از SFTP به‌عنوان لایه پشتیبان استفاده کنند. اگر سرور مقصد شما خیلی قدیمی باشد، این تغییر ساختار باعث کرش ارتباط می‌شود.
  • عیب‌یابی: در این سناریو، سوییچ -O را به دستور اضافه کنید تا کلاینت مجبور شود فرایند انتقال فایل از لینوکس به سرور با SCP را با همان پروتکل سنتی و قدیمی هندل کند.
⚠️ هشدار خیلی مهم
لینوکس به‌شدت روی امنیت کلیدهای خصوصی حساس است. اگر از SSH Key برای اتصال استفاده می‌کنید و پرمیشن فایل کلید شما خیلی باز باشد (مثلاً دسترسی خواندن برای همه کاربران سیستم محلی)، دستور SCP به‌دلایل امنیتی کلاً اجرا نمی‌شود و ارور پابلیک‌کی می‌دهد. ترفند تجربی حل این چالش، این است که قبل‌از هر کاری، پرمیشن کلید را در سیستم محلی خود با دستور زیر محدود کنید:
chmod 400 my_key.pem

مثال‌های کاربردی دستور SCP در سناریوهای واقعی

تئوری‌های ترمینال تازمانی‌که در پروژه‌های واقعی انجام نشوند ملکه ذهن نمی‌شوند. برای درک کامل آموزش استفاده از SCP در Ubuntu به‌عنوان یکی از پرکاربردترین توزیع‌های لینوکس، چند سناریوی روزمره و کاربردی را که هر توسعه‌دهنده یا ادمین شبکه بارها با آن‌ها مواجه می‌شود، به‌صورت کدهای آماده ترمینال بررسی می‌کنیم.

۱. انتقال یک فایل متنی ساده (Text File)

فرض کنید می‌خواهید یک فایل متنی حاوی کلیدهای دسترسی یا تنظیمات به نام notes.txt را به دایرکتوری عمومی سرور بفرستید:

scp notes.txt root@192.168.1.50:/var/www/html/

۲. انتقال یک فایل فشرده و حجیم (Zip File)

جابه‌جایی فایل‌های تکی زیپ، به‌دلیل عدم شکستگی ساختار داده، بالاترین سرعت را در پروتکل SSH دارد. برای فرستادن بکاپ سایت به پوشه بکاپ‌های سرور مقصد، کامند زیر را اجرا کنید:

scp backup_2026.zip admin@192.168.1.50:/home/admin/backups/

۳. آموزش انتقال پوشه با SCP به‌صورت یکجا

همان‌طورکه پیش‌از این اشاره شد، برای جابه‌جایی دایرکتوری‌ها نباید سوئیچ بازگشتی را فراموش کنید. اگر می‌خواهید کل پوشه سورس‌کد پروژه خود مثلا به نام my_project را آپلود کنید، آموزش دستور SCP در این فرمول بیان می‌شود:

scp -r /home/local/my_project root@192.168.1.50:/opt/apps/

۴. انتقال فایل بین دو سرور با SCP (سرور به سرور)

اگر ادمین شبکه هستید و می‌خواهید یک فایل سنگین را مستقیم و بدون واسطه قرار دادن سیستم خود از سرور مبدا (VPS A) به سرور مقصد (VPS B) انتقال دهید، کامند را در ترمینال سیستم شخصی خود به این صورت ردیف کنید (با فرض استفاده از سوئیچ -3 برای دور زدن فایروال):

scp -3 userA@vps_A_ip:/root/data.tar.gz userB@vps_B_ip:/home/userB/

۵. انتقال فایل از ویندوز به لینوکس با SCP

در ویندوزهای ج‍دیدتر (۱۰ و ۱۱) دیگر نیازی به نصب نرم‌افزارهای فرعی و سنگین کلاینت ندارید. مایکروسافت ابزار OpenSSH را به‌صورت بومی در دل ویندوز جا داده است. کافی است ابزار PowerShell یا کامند پرامپت (CMD) ویندوز را باز کنید. سینتکس انتقال فایل از ویندوز دقیقاً مشابه لینوکس است:

scp C:\Users\WindowsUser\Desktop\app.jar root@192.168.1.50:/usr/local/bin/

نقش زیرساخت در تمرین و اجرای امن دستورات خط فرمان

بسیاری از ادمین‌ها و دولوپرهای تازه‌کار، یادگیری و آزمون این فرایندها را روی سیستم محلی یا سرورهای اصلی پروژه شروع می‌کنند؛ غافل از اینکه یک اشتباه کوچک در مسیردهی مقصد یا یک اختلال شبکه درحین جابه‌جایی دیتای خام، می‌تواند پیکربندی‌های حیاتی را به‌هم بریزد. اگر می‌خواهید سناریوهای مختلف آموزش دستور SCP و ترفندهای مدیریت ترمینال را در یک محیط واقعی، پایدار و بدون ریسک تمرین کنید،  سرور مجازی (VPS) بهترین و امن‌ترین بستر برای تست و استقرار پروژه‌های شما است.

شرکت رایانش ابری فردوسی این سرورها را بر پایه سخت‌افزارهای پیشرفته دیتاسنتری و با بالاترین سطح امنیت ارتباطی در اختیار شما می‌گذارد تا بدون دغدغه قطعی شبکه، مهارت‌ها یا پروژه‌های خود را ارتقا دهید.

بخشی از مزایا و امکانات VPS ابر فردوسی

ویژگی زیرساخت مامشخصات فنی و کاربردیدستاورد عملیاتی برای مهندس لینوکس
مدل هزینه ساعتیپرداخت فقط به‌ازای ساعت روشن بودن سرورصرفه‌جویی شدید در هزینه‌های تمرین و تست
سخت‌افزار نسل جدید HPEپردازنده‌های Intel Xeon / AMD Epyc و دیسک‌های NVMeتجربه بالاترین پورت سرعت در جابه‌جایی دیتای سنگین
منابع کاملا اختصاصیمحیط کاملاً ایزوله بدون به اشتراک‌گذاری هستهامنیت کامل داده‌ها در برابر نفوذ و حملات شبکه
بازارچه ابری خودکارنصب اتوماتیک داکر، گیت‌لب، انجین‌ایکس و وردپرس و…راه‌اندازی زیرساخت‌های پیچیده با سرعت بالا

یکی از بزرگ‌ترین مزایای ابر فردوسی این است که به‌محض ثبت‌نام، ۱۰۰ هزار تومان اعتبار رایگان به شما اختصاص می‌دهد. این یعنی می‌توانید بدون پرداخت هزینه، یک سرور ابری واقعی راه‌اندازی کنید، دستورات انتقال فایل را روی آن تست کنید و پس از اطمینان از کیفیت و پایداری شبکه، پروژه خود را توسعه دهید.

سرور مجازی

جمع‌بندی

تسلط بر خط فرمان لینوکس ابزاری نیست که یک‌شبه به دست بیاید، اما یادگیری فرایندهای مهمی که در آموزش دستور SCP بیان شد، از آن مهارت‌هایی است که مسیر شما را در مدیریت سرور و توسعه نرم‌افزار هموار می‌کند. در این راهنما دیدیم که ابزار SCP چطور با تکیه بر بستر امن SSH، کار کپی امن فایل‌ها را بدون نیاز به کلاینت‌های سنگین گرافیکی هندل می‌کند.

اکنون مرور کوتاهی بر اصول انتقال داده که بررسی کردیم داشته باشیم:

  • برای جابه‌جایی سریع تک‌فایل‌های متنی یا فایل‌های زیپ، SCP بی‌رقیب است.
  • برای پوشه‌ها حتماً باید سوییچ بازگشتی -r را چاشنی کامند کنید.
  • در توزیع‌های جدید – اگر با سیستم‌های قدیمی به مشکل خوردید- سوییچ سازگاری -O ناجی شما است.
  • برای دیتای بسیار سنگین سازمانی، عاقلانه‌تر است که بار شبکه را روی دوش ابزار rsync بگذارید.

نظر شما چیست؟ ترجیح می‌دهید برای کارهای روزمره خود از خط فرمان و دستور SCP استفاده کنید یا هنوز کلاینت‌های گرافیکی مثل FileZilla را ترجیح می‌دهید؟ درضمن اگر درحین اجرای کامندها با ارور مبهمی مواجه شده‌اید که در چک‌لیست خطاها نبود، دغدغه یا تجربه‌تان را در بخش نظرات پایین همین صفحه بنویسید تا با هم بررسی کنیم.

منابع:
Redhat | stat.duke | man7 | redhat

سؤالات متداول

دستور SCP در لینوکس چیست و چه کاربردی دارد؟

ابزار SCP (مخفف Secure Copy Protocol) یک دستور خط فرمانی در سیستم‌عامل‌های لینوکس و شبه‌یونیکس است که برای کپی و انتقال فایل بین سیستم‌های مختلف (لوکال به سرور، سرور به لوکال و سرور به سرور) به‌صورت کاملاً امن و رمزگذاری‌شده بر پایه پروتکل SSH استفاده می‌شود.

چگونه با دستور SCP فایل منتقل کنیم؟

ساختار کلی دستور بر پایه فرمول scp [options] source destination است. برای مثال، جهت انتقال فایل app.log به پوشه هوم سرور، دستور زیر را در ترمینال سیستم خود اجرا کنید:
scp app.log user@server_ip:~

انتقال فایل از ویندوز به لینوکس با SCP به چه صورت است؟

در ویندوزهای ۱۰ و ۱۱، ابزار OpenSSH به‌صورت پیش‌فرض فعال است. کافی است ابزار PowerShell یا CMD را باز کنید و دقیقاً با همان سینتکس لینوکس، فرمان کپی را صادر کنید؛ مانند:
scp C:\data\file.zip root@server_ip:/var/www/

گزینه -Pدر SCP چه تفاوتی با -p دارد؟

این یکی از چالش‌های مدیریت ترمینال است. سوئیچ با حروف بزرگ (-P) برای مشخص کردن پورت سفارشی و غیرپیش‌فرض SSH سرور مقصد استفاده می‌شود. اما سوئیچ با حروف کوچک (-p) برای حفظ تاریخچه زمان تغییر و سطح دسترسی‌های اصلی فایل (Preserve attributes) در مبدا کاربرد دارد.

تفاوت SCP با SFTP و rsync چیست؟

ابزار SCP فایل‌ها را به‌صورت خطی و مستقیم استریم می‌کند اما قابلیت ادامه دانلودهای قطع‌شده را ندارد. ابزار SFTP یک پروتکل تعاملی کامل برای مدیریت فایل (مثل ساخت پوشه و حذف) است. در مقابل، ابزار rsync هوشمندترین گزینه برای بکاپ‌های سنگین است؛ چراکه فقط تغییرات فایل‌ها را منتقل می‌کند و قابلیت Resume دارد.

چرا هنگام استفاده از SCP خطای Permission denied می‌گیریم؟

این خطا نشان می‌دهد احراز هویت شما با موفقیت انجام شده، اما کاربری که با آن به سرور ریموت وصل شده‌اید، مجوز نوشتن (Write Permission) در دایرکتوری مقصد یا مجوز خواندن از دایرکتوری مبدا را ندارد. برای رفع آن باید مالکیت پوشه مقصد را با دستور chown یا سطح دسترسی آن را بررسی کنید.

یاسین اسدی

اگه می‌خوای زندگیت تغیر کنه کتاب نخون؛ نوشته‌های منو بخون!
پست های مرتبط

راه اندازی سرور ایمیل از نصب Mail Server تا ارسال اولین پیام

راه اندازی سرور ایمیل اختصاصی یعنی پیکربندی یک زیرساخت نرم‌افزاری مستقل روی سرور که مدیریت کامل فرایند ارسال، دریافت و ذخیره‌سازی پیام‌ها را بدون وابستگی به سرویس‌های عمومی یا اشتراکی در اختیار شما می‌گذارد. میل سرور استاندارد…

۱۶ شهریور ۱۴۰۵

مصرف بالای هاست و راهنمای کامل رفع مشکل منابع

وقتی سایت بدون هیچ دلیل واضحی کند می‌شود یا مدام با خطای ۵۰۸ روبه‌رو می‌شوید، احتمالاً با مشکل مصرف بالای هاست دست‌وپنجه نرم می‌کنید. این اتفاق لزوماً به معنی انفجار ترافیک و پربازدید شدن ناگهانی سایت نیست؛…

۱۶ شهریور ۱۴۰۵

نصب Zabbix و آموزش جامع راه‌اندازی سیستم مانیتورینگ زبیکس

بسیاری از متخصصان شبکه تصور می‌کنند نصب Zabbix صرفاً با اجرای چند دستور گام‌به‌گام و رسیدن به پنل گرافیکی وب به پایان می‌رسد؛ اما در عمل، یک اشتباه کوچک در پیکربندی دیتابیس یا ناهماهنگی نسخه‌های ایجنت می‌تواند…

۱۶ شهریور ۱۴۰۵
0 0 رای ها
به مقاله امتیاز بدید
0 نظرات