scp یا Secure Copy یک دستور لینوکس برای کپی کردن فایل‌ها و پوشه‌ها بین دو کامپیوتر از طریق یک اتصال امن SSH است. این ابزار به دلیل سادگی و امنیت بالا، برای انتقال فایل بین سرورها، رایانه‌های شخصی و ماشین‌های مجازی بسیار پرکاربرد است. scp شبیه به دستور cp (کپی فایل‌ها در سیستم محلی) است، اما فایل‌ها را بین دو دستگاه (محلی و ریموت) منتقل می‌کند.

🔧 ساختار کلی دستور scp

scp [options] [source] [destination] 

🎯 اجزای ساختار:

  • [options] = تنظیمات اضافه (مثل -r, -P, -i)

  • [source] = مسیر فایل یا پوشه‌ای که می‌خواهی کپی کنی

  • [destination] = مقصدی که می‌خواهی فایل به آن منتقل شود


✅ حالت‌های مختلف استفاده از scp

1. 📤 کپی فایل از محلی به ریموت:

scp file.txt user@remote_host:/remote/path/ 

📌 توضیح:

  • file.txt = فایلی در سیستم شما

  • user = نام کاربری سیستم مقصد

  • remote_host = IP یا دامنه مقصد

  • /remote/path/ = مسیر ذخیره فایل در سیستم مقصد

📌 مثال عملی:

scp index.html root@192.168.1.50:/var/www/html/ 

2. 📥 کپی فایل از ریموت به محلی:

scp user@remote_host:/remote/path/file.txt /local/path/ 

📌 مثال:

scp root@192.168.1.50:/etc/hosts /home/user/Downloads/ 

3. 📁 کپی پوشه به صورت بازگشتی (recursive):

scp -r myfolder/ user@remote_host:/remote/path/ 

📌 مثال:

scp -r /home/user/logs/ root@192.168.1.50:/backup/logs/ 

4. 🔁 کپی چند فایل هم‌زمان:

scp file1.txt file2.txt user@remote_host:/remote/path/ 

📌 مثال:

scp a.txt b.txt c.txt root@192.168.1.50:/tmp/ 

⚙️ مهم‌ترین گزینه‌های scp

گزینه توضیح
-r کپی بازگشتی (برای پوشه‌ها)
-P تعیین پورت SSH (مثلاً -P 2222)
-i مشخص کردن کلید خصوصی SSH
-C فشرده‌سازی داده‌ها حین انتقال
-v حالت verbose برای نمایش جزئیات
-q خاموش کردن خروجی‌ها (quiet mode)
-o ارسال تنظیمات اضافی به SSH (مثل تنظیمات امنیتی)

🔐 مثال‌های پیشرفته

✔️ استفاده از پورت خاص SSH:

scp -P 2222 file.txt user@host:/path/ 

📝 اگر سرور مقصد از پورت غیرپیش‌فرض SSH (یعنی 22) استفاده کند، باید با -P پورت را مشخص کنیم.


✔️ استفاده از کلید خصوصی (برای ورود بدون رمز عبور):

scp -i ~/.ssh/id_rsa file.txt user@host:/path/ 

📝 این روش زمانی مفید است که احراز هویت با کلید انجام شود، نه با رمز عبور.


✔️ ترکیب چند گزینه:

scp -r -P 2222 -i ~/.ssh/id_rsa /var/www/ user@host:/backup/www/ 

💡 نکات و ترفندهای مفید

  1. 🔄 scp نمی‌تواند انتقال افزایشی انجام دهد؛ یعنی اگر فایل وجود داشته باشد، دوباره کامل کپی می‌کند. برای انتقال هوشمند، از rsync استفاده کن.

  2. ⚠️ اگر برای بار اول به یک سرور SSH وصل می‌شوی، پیام تأیید کلید میزبان نمایش داده می‌شود.

  3. اگر با پیغام زیر مواجه شدی:

    Host key verification failed 

    می‌تونی با این گزینه ادامه بدی:

    scp -o StrictHostKeyChecking=no ... 
  4. برای کپی از یک سرور به سرور دیگر از سیستم واسطه:

    scp user1@host1:/path/file.txt user2@host2:/path/ 

    اما برای این مورد بهتره از ssh و rsync استفاده بشه.


📦 جایگزین‌ها

ابزار ویژگی
rsync کپی هوشمند و سریع‌تر با پشتیبانی از انتقال افزایشی
sftp محیط امن و تعاملی برای مدیریت فایل‌ها روی سرور
rclone مناسب برای فضای ابری مانند Google Drive، S3 و ...


✅ جمع‌بندی

کاربرد دستور نمونه
فایل محلی → ریموت scp file.txt user@host:/path/
فایل ریموت → محلی scp user@host:/path/file.txt ./
پوشه → ریموت scp -r folder/ user@host:/path/
استفاده از پورت و کلید scp -P 2222 -i id_rsa file user@host:/path/