SCP (کپی ایمن)، یک ابزار خط فرمان است که به شما این امکان را می‌دهد که فایل‌ها و دایرکتوری‌ها را به‌صورت ایمن از یک مکان به مکان دیگر کپی کنید.

با استفاده از scp، می‌توانید یک فایل یا دایرکتوری را:
    • از سیستم محلی خودتان به یک سیستم ریموت (سرور) کپی کنید.
    • از یک سیستم ریموت (سرور) به سیستم محلی خودتان کپی نمایید.
    • بین دو سیستم دور از سیستم محلی‌تان انتقال را انجام دهید.

هنگام انتقال داده‌ها با scp، فایل‌ها و رمز عبور، هردو رمزگذاری می‌شوند؛ به‌طوری‌که هرکسی ترافیک اطلاعات را شنود کند، اطلاعات شما مورد سواستفاده قرار نخواهد گرفت؛ در این آموزش، نحوه استفاده از دستور scp را از طریق مثال‌های عملی و توضیحات مفصل در مورد رایج‌ترین کاربردهای scp به شما نشان خواهیم داد.

 

دستور SCP

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

scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2

    • OPTION - گزینه‌های SCP عبارت‌اند از cipher (رمزگذاری)، ssh configuration (پیکربندی ssh)، ssh port (پورت ssh)، limit (حد)، recursive copy (کپی بازگشتی) و غیره.
    • [user@]SRC_HOST:] file1- فایل منبع.
    •  [user@] DEST_HOST:] file2- فایل مقصد

فایل‌های محلی باید با استفاده از یک مسیر مطلق یا نسبی مشخص شوند درحالی‌که نام‌های فایل‌های خارج از سیستم محلی باید شامل مشخصات کاربر و میزبان باشد.
scp سویيچ‌های زیادی را در اختیار شما قرار می‌دهد؛ پراستفاده‌ترین آن‌ها عبارت‌اند از:
    • -P  (بزرگ) پورت ssh میزبان ریموت را مشخص می‌کند.
    • -p (کوچک) تعداد مرتبه تغییر و دسترسی فایل‌ها را ذخیره می‌کند.
    • -q اگر می‌خواهید پیام میزان پیشرفت اجرا و تمام پیام‌ها غیر از پیام خطا را حذف کنید، از این گزینه استفاده نمایید.
    • -C این گزینه، scp را وادار به فشرده‌سازی داده‌های ارسال شده به دستگاه مقصد می‌کند.
    • -r این گزینه از scp می‌خواهد که دایرکتوری‌ها را به‌صورت بازگشتی کپی کند.

قبل از شروع

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

کپی فایل ها و دایرکتوری ها بین دو سیستم با scp

با دستور scp یک فایل محلی را در یک سیستم ریموت کپی کنید
برای کپی کردن یک فایل، از یک سیستم محلی به یک سیستم ریموت دستور زیر را اجرا کنید:

scp file.txt remote_username@10.10.0.2:/remote/directory

که در آن، file.txt نام فایلی است که می‌خواهیم آن را از سیستم خود بر روی سرور کپی کنیم، remote_username کاربری است که از سرور ریموت استفاده می‌کند، 10.10.0.2 آدرس IP سرور است. /remote/directory مسیر آن دایرکتوری است که می‌خواهید فایل را در آن کپی کنید. اگر یک دایرکتوری را در سرور ریموت مشخص نکنید، فایل در دایرکتوری اصلی کاربر سیستم ریموت کپی می‌شود.
در صروتی که کلید SSH شما بر روی سرور مقصد وجود نداشته باشد، از شما خواسته می‌شود که رمز ورود کاربر را وارد کنید و سپس فرآیند انتقال شروع می‌شود.

remote_username@10.10.0.2's password:
file.txt                             100%    0     0.0KB/s   00:00

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

scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt

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

scp -P 2322 file.txt remote_username@10.10.0.2:/remote/directory

دستور برای کپی یک دایرکتوری بسیار شبیه کپی کردن فایل‌ها است. تنها تفاوت این است که برای کپی بازگشتی باید از گزینه‌ی -r استفاده کنید.
برای کپی کردن یک دایرکتوری از یک سیستم محلی به یک سیستم ریموت، از گزینه -r به‌صورت زیر استفاده می‌شود:

scp -r /local/directory remote_username@10.10.0.2:/remote/directory

یک فایل ریموت را با استفاده از دستور scp، در یک سیستم محلی کپی کنید
برای کپی کردن یک فایل از یک سیستم ریموت به یک سیستم محلی، از مکان ریموت به‌عنوان منبع و از مکان محلی به‌عنوان مقصد استفاده کنید.
به‌عنوان‌مثال برای کپی کردن پرونده‌ای به نام file.txt از یک سرور ریموت با IP برابر با 10.10.0.2، دستور زیر را اجرا کنید:

scp remote_username@10.10.0.2:/remote/file.txt /local/directory

در صورتی که کلید SSH شما بر روی سرور تنظیم نشده باشد، باید رمز عبور خود را وارد کنید تا عملیات آغاز گردد.

 

یک فایل را بین دو سیستم ریموت با استفاده از دستور scp کپی کنید:

برخلاف دستور rsync، هنگام استفاده از scp برای انتقال فایل از یک دستگاه ریموت به دستگاه ریموت دیگر، نیازی به ورود به یکی از سرورها ندارید.
دستور زیر فایل /files/file.txt را از میزبان ریموت host1.com در دایرکتوری /files بر روی میزبان ریموت host2.com کپی می‌کند.

scp user1@host1.com:/files/file.txt user2@host2.com:/files

در اینجا، از شما خواسته می‌شود رمزهای عبور را برای هر دو حساب کاربری ریموت وارد کنید. داده‌ها مستقیماً از یک میزبان ریموت به میزبان دیگر منتقل می‌شوند.

نکته: با اینکه شما می‌توانید از این روش برای انتقال اطلاعات بین دو سرور دیگر استفاده کنید، اما توصیه می‌کنیم این کار را انجام ندهید و ابتدا به یکی از سرور‌ها وارد شده و از آنجا دستور SCP را اجرا نمایید.
برای مسیریابی ترافیک اطلاعات از طریق دستگاهی که در آن، دستور صادر شده است، از گزینه 3- استفاده کنید:

scp -3 user1@host1.com:/files/file.txt user2@host2.com:/files

 

نتیجه:

در این آموزش یاد گرفتید که چگونه از دستور scp برای کپی کردن فایل‌ها و دایرکتوری‌ها استفاده کنید.

منبع: این