
نحوه کار با دستور scp در لینوکس برای انتقال امن فایل ها
ابزار secure copy با مخفف scp این امکان را به کاربران لینوکس می دهد که فایل های خود را به صورت کاملاً امن بین سرورهای محلی و ریموت انتقال دهند. دستور scp در لینوکس، موقع کپی کردن فایل ها بین سرورها از پروتکل SSH برای احراز هویت و رمزگذاری استفاده می کند.
دستور scp حالت امن تر دستور cp است و برای کپی کردن اطلاعات محرمانه و خصوصی، از سرور ریموت روی سرور محلی یا از یک سرور ریموت روی سرور ریموت دیگر استفاده می شود و سادگی، امنیت و نصب بودن آن در اکثر توزیع های لینوکس باعث محبوبیت هر چه بیشتر آن شده است.
پیش نیازهای استفاده از دستور scp در لینوکس
- فعال بودن SSH
- دسترسی SSH به سرور لینوکس موردنظر
- دسترسی روت به سیستم های مبدا و مقصد
- دسترسی به ترمینال
- قابل دسترس بودن دو سیستم در شبکه محلی یا اینترنت
- نصب بودن دستور scp
این دستور به طور پیش فرض در اکثر توزیع های لینوکس نصب است ولی بهتر است با اجرای دستور زیر از نصب بودن آن مطمئن شوید:
scp --version
اگر در خروجی این دستور، شماره نسخه دستور را ندیدید، یعنی این دستور در سیستم شما نصب نیست و ابتدا باید آن را نصب کنید.
این دستور بخشی از پکیج OpenSSH است و برای اینکه به این دستور دسترسی داشته باشید باید پکیج OpenSSH را نصب کنید.
دستور نصب OpenSSH در سیستم های مبتنی بر دبیان مثل اوبونتو
sudo apt install openssh-client openssh-server
دستور نصب OpenSSH در سیستم های مبتنی بر ردهت مثل CentOS و فدورا
sudo yum install openssh-clients openssh-server
یا
sudo dnf install openssh-clients openssh-server
دستور نصب OpenSSH در آرچ لینوکس
sudo pacman -S openssh
البته اگر با داده های محرمانه زیادی سروکار دارید و دوست ندارید ریسک کنید، با خرید سرور مجازی لینوکس، می توانید به راحتی با استفاده از ابزارهایی مانند scp، فایل ها و داده های خود را به صورت امن تر و سریع تر بین سیستم های مختلف منتقل کنید.
سینتکس دستور scp در لینوکس
سینتکس پایه دستور scp در لینوکس به صورت زیر است:
scp [option] [user_name@source_host:source/file] [user_name@target_host:target/path]
همانطورکه در سینتکس هم می بینید آدرس سرور مبدا همراه با مسیر فایل مشخص می شود و سپس آدرس سرور مقصد همراه با دایرکتوری ذخیره سازی فایل لحاظ می شود که برای کپی کردن فایل یا فایل های موردنظر کافی هستند.
اما آپشن های دیگری هم هستند که با اضافه کردن آنها به دستور scp می توانید رفتار آن را به طرز دلخواه سفارشی سازی کنید.
آپشن های دستور scp
آپشن | کاربرد |
b- | تعیین سایز بافر برای انتقال داده |
C- | فعال سازی فشرده سازی |
d- | کپی فایل تنها در صورت وجود دایرکتوری مقصد |
F- | تعیین فایل پیکربندی جایگزین برای SSH |
i- | تعیین فایل حاوی کلید احراز هویت عمومی |
l- | تعیین محدودیت برای پهنای باند |
o- | تنظیم آپشن های SSH |
P- | تعیین پورت موردنظر برای اتصال |
p- | حفظ تایم استمپ برای ساده سازی تغییر و دسترسی |
r- | کپی فولدرها به صورت بازگشتی |
Q- | غیرفعال سازی آمار انتقال داده |
u- | حذف فایل مبدا بعد از تکمیل عملیات کپی |
برای کسب اطلاعات بیشتر در مورد دستور scp می توانید از دو دستور زیر کمک بگیرید:
man scp
scp -h
مثال های کاربردی از دستور scp در لینوکس
با بررسی این مثال ها به طور کامل با طرز کار و کاربرد دستور scp آشنا خواهید شد:
کپی فایل از سیستم محلی به سیستم ریموت لینوکس
برای این کار نیازی به مشخص کردن آدرس مبدا نیست. فقط باید آدرس فایل موردنظر را در قسمت اول قرار دهید و سپس آدرس سیستم ریموت را به همراه مسیر موردنظر برای کپی فایل لحاظ کنید:
scp Desktop/sample_example.txt [email protected]:/home/remote_dir
Desktop/sample_example.txt مسیر فایلی است که قرار است در سیستم ریموت کپی شود.
[email protected] نام کاربر و آدرس آی پی سرور ریموت است.
/home/remote_dir دایرکتوری مقصد مربوط به سیستم ریموت است که قرار است فایل موردنظر در آن کپی شود.
اگر می خواهید چند فایل را به طور همزمان به سرور ریموت کپی کنید، می توانید مسیر فایل ها را به صورت زیر در دستور scp لینوکس لحاظ کنید:
scp example/sample1.txt example/sample2.txt example/sample2.txt [email protected]:/home/remote_dir
یا اگر فایل های موردنظر شما از یک نوع (مثلاً pdf) هستند و می خواهید همه آنها را به صورت همزمان ارسال کنید، می توانید از وایلد کارت * استفاده کنید:
scp example/*.pdf [email protected]:/home/remote_dir
این دستور تمام فایل های pdf موجود در مسیری که مشخص کرده اید را در سرور ریموت کپی می کند.
انتقال فایل از یک سیستم ریموت به سیستم محلی
اگر می خواهید با دستور scp فایل موردنظر را از یک سیستم ریموت به سیستم محلی خود منتقل کنید، این بار باید آدرس سرور ریموت را در قسمت اول قرار دهید و سپس مسیری که می خواهید فایل را در آن ذخیره کنید، وارد کنید.
scp [email protected]:/home/remote_dir/sample_example.txt home/Desktop
این دستور هم فایل sample_example.txt موجود در مسیر /home/remote_dir سرور [email protected] را در دسکتاپ سیستم محلی شما کپی می کند.
حالا اگر می خواهید چند فایل را از سرور محلی به سیستم محلی خود منتقل کنید، می توانید مسیر فایل ها به صورت زیر در دستور scp اجرا کنید:
scp [email protected]:{file1, file2, file3 } home/Desktop
انتقال فایل از یک سرور ریموت به سرور ریموت دیگر
در این روش، فایل موردنظر خود از یک سرور را در مسیر دلخواه از سرور ریموت دیگر کپی می کنید و عملاً سیستم محلی شما درگیر این پروسه نمی شود.
scp [email protected]:/home/remote_dir/sample_example.txt [email protected]:home/Desktop
این دستور فایل sample_example.txt موجود در مسیر /home/remote_dir/ سرور [email protected] را در فولدر دسکتاپ سرور [email protected] کپی می کند.
درست مثل حالت قبل، برای انتقال چند فایل به طور همزمان هم می توانید فایل ها را به صورت زیر در دستور scp لحاظ کنید:
scp [email protected]:{file1, file2, file3 } [email protected]:home/Desktop
این مثال ها، نمونه هایی از پایه ترین کاربرد دستور scp هستند ولی با استفاده از آپشن ها می توانید کیفیت پروسه انتقال فایل ها را ارتقا دهید.
کپی دایرکتوری به صورت بازگشتی
اگر دایرکتوری خاصی را مدنظر دارید که از زیردایرکتوری های زیادی تشکیل شده است و می خواهید این زیردایرکتوری ها را هم به صورت بازگشتی کپی کنید، می توانید از آپشن r استفاده کنید:
scp -r Directory_path [email protected]:/home/remote_dir
این دستور، دایرکتوری موردنظر را به صورت بازگشتی از سیستم محلی به سرور [email protected] کپی می کند.
کپی فایل با scp توسط یک پورت خاص
Scp به طور پیش فرض SSH یعنی پورت ۲۲ استفاده می کند ولی اگر پورت SSH سیستم محلی یا ریموت از ۲۲ به ۲۲۲۲ تغییر یافته است، باید این شماره پورت را در دستور scp هم مشخص کنید و این کار با آپشن P قابل انجام است.
scp -P 2222 home/Desktop [email protected]:/home/remote_dir/sample_example.txt
محدود کردن پهنای باند برای پروسه انتقال فایل با scp
یکی دیگر از آپشن های مفید دستور scp، امکان محدود کردن پهنای باند است. این کار با مزایایی مثل جلوگیری از اشغال کل پهنای باند، مدیریت مصرف داده و پیشگیری مشکلات شبکه همراه است.
برای محدودسازی مصرف پهنای باند کافیست از آپشن l استفاده کنید و مقداری که می خواهید را بر اساس کیلو بیت بر ثانیه مشخص کنید.
با توجه به اینکه ۱ بایت برابر ۸ بیت است، مثلاً اگر می خواهید محدودیت ۲۰۰ کیلوبایت بر ثانیه را برای پهنای باند مشخص کنید، باید ۲۰۰ را در ۸ ضرب کنید و سپس عدد ۱۶۰۰ را در دستور scp لحاظ کنید:
scp -l 1600 home/Desktop [email protected]:/home/remote_dir/sample_example.txt
افزایش سرعت انتقال فایل با آپشن C
کاهش حجم فایل موردنظر می تواند باعث افزایش سرعت انتقال آن شود که این هم با تکنیک فشرده سازی امکان پذیر است.
برای اینکه فایل موردنظر را با دستور scp فشرده کنید و بعد منتقل کنید، می توانید از آپشن C استفاده کنید.
scp -C Desktop/sample_example.txt [email protected]:/home/remote_dir
تعیین پروتکل برای انتقال فایل
شما می توانید دستور scp در لینوکس را مجبور کنید که از پروتکل IPv4 یا IPv6 استفاده کند. این ایده می تواند برای سازگاری با شبکه و رفع مشکلات اتصال مفید واقع شود.
استفاده از IPv4
scp -4 [email protected]:/home/remote_dir/sample_example.txt home/Desktop
استفاده از IPv6
scp -6 [email protected]:/home/remote_dir/sample_example.txt home/Desktop
سخن آخر
دستور scp یک روش امن برای کپی فایل ها بین سرورهای ریموت و محلی است و با آپشن هایی که دارد این امکان را به شما می دهد که پروسه انتقال فایل ها را تحت کنترل نگه دارید.