SCP (کپی امن) خط دستوری پرکاربردی است که فایل و دایرکتوریها را با امنیت کامل بین دو مکان کپی میکند. از آنجایی که بسیاری از لینوکس بازها عاشق استفاده از کدنویسی بهجای رابط کاربری برای انجام کارهای روزمرهشان هستند، این دستور یکی رایجترین کدهای دستورات لینوکس بین آنهاست.
با کد scp میتوانید فایل یا دایرکتوری را در موقعیتهای زیر کپی کنید:
- از سیستم لوکال به سیستم ریموت
- از سیستم ریموت به سیستم لوکال
- بین دو سیستم ریموت از سیستم لوکال خودتان
فایلها و رمزهای عبور در زمان انتقال دادهها با استفاده از scp رمزنگاری میشوند تا اطلاعات حساس به دست افراد در حال جاسوسی روی ترافیک شما نیفتد.
در ادامه، درباره چگونگی استفاده از دستور انتقال فایل در لینوکس اوبونتو یا هر توزیع دیگری از طریق مثالهای عملی و توضیح جزئیات مربوط به گزینههای رایج دستور scp صحبت میکنیم.
سینتکس دستور SCP
قبل از اینکه استفاده از دستور scp را شروع کنیم، کمی بیایید درباره سینتکس پایه آن یاد بگیریم.
سینتکس دستور scp چنین قالبی به خود میگیرد:
1 | scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2 |
- OPTION: گزینههای موجود برای scp شامل cipher، پیکربندی ssh، پورت ssh، محدودیت، کپی ترتیبی و غیره
- ● [user@]SRC_HOST:]file1: فایل منبع
- ● [user@]DEST_HOST:]file2: فایل مقصد
برای فایلهای لوکال، مسیر مطلق یا نسبی سیستمی کافی است ولی فایلهای ریموت باید کاربر (user) و میزبان (host) مشخصی داشته باشند.
چندین گزینه برای scp وجود دارد که تمام جنبههای کارکرد آن را کنترل میکنند. از رایجترین گزینه عبارتند از:
- ● -P: پورت ssh میزبان ریموت را مشخص میکند
- ● -p: تغییرات فایلها و زمان دسترسی را حفظ میکند
- ● -q: از این گزینه برای توقف اندازهگیر پیشرفت و پیامهای غیرخطا استفاده میشود
- ● -C: با این گزینه scp مجبور میشود هنگام فرستادن دادهها برای دستگاه مقصد، آنها را فشرده کند
- ● -r: این گزینه به scp میگوید تا کپیها را بهصورت ترتیبی انجام دهد
قبل شروع انتقال فایل در لینوکس توجه کنید
دستور انتقال فایل در لینوکس (SCP) برای انتقال دادهها به ssh متکی است. این دستور از کلید یا رمز عبور ssh برای اعتبارسنجی در سیستمهای ریموت استفاده میکند.
کالن (;) در Scp برای تمایزدادن بین لوکیشنهای لوکال و ریموت استفاده بهکار میرود.
شما برای آنکه بتوانید فایلها را کپی کنید، حداقل باید مجوز خواندن در سیستم منبع و مجوز نوشتن در سیستم مقصد را داشته باشید.
هنگام کپیکردن فایلهایی که روی هردو سیستم نام و لوکیشن مشابهی دارند مراقب باشید، زیرا scp بدون هیچ هشداری آنها را از نو مینویسد (overwrite).
اگر میخواهید فایلهای حجیمی را انتقال دهید، توصیه میکنیم از سشنهای GNU Screen یا Tmux استفاده کنید.
کپی فایلها و دایرکتوریها بین دو سیستم از طریق scp
کپی فایل از سیستم لوکال به سیستم ریموت با دستور scp
برای کپیکردن فایل از سیستم لوکال روی سیستم ریموت، دستور زیر را اجرا کنید:
1 | scp file.txt remote_username@10.10.0.2:/remote/directory |
- File.txt: نام فایلی است که میخواهیم کپی کنیم
- Remote_username: کاربر روی سیستم ریموت است
- ● 10.10.0.2: آدرس آیپی سرور است
- ● /remote/directory: مسیر دایرکتوری است که میخواهید فایلها در آن کپی شوند. اگر مسیر خاصی را مشخص نکنید، فایلها در دایرکتوری اصلی کاربر ذخیره میشوند
از شما خواسته میشود تا رمز عبور کاربر را وارد کنید تا فرآیند انتقال به راه بیفتد.
1 2 | remote_username@10.10.0.2's password: file.txt 100% 0 0.0KB/s 00:00 |
اگر اسم فایل را از لوکیشن مقصد حذف کنید، به نام اصلی خود ذخیره میشوند. اگر میخواهید فایلها با نامی متفاوت ذخیره شوند، باید نام جدید فایل را در دستور خود بنویسید:
1 | scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt |
اگر ssh در میزبان ریموت در حال شنود از روی پورتی غیر از 22 پیشفرض باشد، میتوانید با –P پورت آن را مشخص کنید:
1 | scp -P 2322 file.txt remote_username@10.10.0.2:/remote/directory |
دستور کپی دایرکتوری شباهت زیادی به کپی فایلها دارد. تنها تفاوت آن نیاز به استفاده از پرچم –r برای کپی ترتیبی (درختی) است.
برای کپی دایرکتوری از سیستم لوکال به ریموت، از گزینه –r استفاده کنید:
1 | scp -r /local/directory remote_username@10.10.0.2:/remote/directory |
کپی فایل از سیستم ریموت به سیستم لوکال با دستور scp
برای کپیکردن فایلها از سیستم ریموت به روی سیستم لوکال، لوکیشن ریموت را منبع و لوکیشن لوکال را مقصد در نظر بگیرید:
مثلا برای کپی فایلی به نام file.txt از سرور ریموتی با آیپی 10.10.0.2، دستور زیر را اجرا کنید:
1 | scp remote_username@10.10.0.2:/remote/file.txt /local/directory |
اگر ورود بدون رمز عبور ssh را برای دستگاه ریموت تنظیم نکردهاید، از شما خواسته میشود تا رمز عبور خود را بنویسید.
کپی فایل بین دو سیستم ریموت با استفاده از دستور scp
هنگام استفاده از scp، برخلاف rsync، لازم نیست برای انتقال فایلها از یک دستگاه ریموت به دیگری، روی هیچ کدام از سرورها لاگین کنید.
دستور زیر، فایل /files/file.txt را از هاست ریموت host1.com در دایرکتوری /files روی هاست ریموت host2.com کپی میکند.
1 | scp user1@host1.com:/files/file.txt user2@host2.com:/files |
لازم است که رمز عبور را برای هردو حساب ریموت وارد کنید. دادهها مستقیما از یک هاست ریموت به دیگری منتقل میشوند.
برای تعیین مسیر ترافیک از طریق دستگاهی که دستور روی آن اجرا شده، گزینه -3 را استفاده کنید:
1 | scp -3 user1@host1.com:/files/file.txt user2@host2.com:/files |
جمعبندی
در این مقاله، یاد گرفتیم چطور از دستور scp برای کپیکردن فایلها و دایرکتوریها استفاده کنیم. SCP یکی از دستورهای کاربردی و مفید در لینوکس است. اگر هرگونه سوالی راجع به چگونگی کارکرد دستور scp دارید، برای ما کامنت بگذارید.
سوالات متداول
دستور SCP دقیقا چیست؟
SCP مخفف Secure Copy Protocol (پروتکل کپی امن) و یک پروتکل شبکه است که برای کپی امن فایلها و پوشهها بین سیستمهای لینوکس روی یک شبکه بهکار میرود. فرمان SCP نقش دستور انتقال فایل در لینوکس را برعهده دارد.
چطور یک دایرکتوری را در لینوکس کپی کنم؟
برای کپی دایرکتوری و تمام فایلها همراهش میتوانید از گزینه –r استفاده کنید. با این دستور، دایرکتوری منبع و تمام فایلهایش بهصورت ترتیبی (درختی) کپی میشوند. این دستور فعال نمیشود تا زمانی که رمز عبور مربوطه را نیز وارد کنید.
چرا از SCP استفاده کنیم؟
با فرمان SCP یا کپی امن میتوانید فایلها را کاملا امن بین سیستم لوکال و ریموت یا دو سیستم ریموت انتقال دهید. اعتبارسنجی و امنیت دستور SCP شباهت زیادی به پروتکل Secure Shell (SSH) دارد. SCP به سادگی، امنیت و نصب پیشفرض روی سیستم مشهور است.
تفاوت بین SCP و SSH چیست؟
تفاوت اصلی ببین دو پروتکل SCP و SSH در کاربردشان است. SSH برای ورود به سیستمهای ریموت و کنترل آنها بهکار میرود، اما SCP برای انتقال فایلها بین دو سیستم ریموت روی یک شبکه.
آیا با SCP میتوان فولدر ساخت؟
خیر
آیا میتوان با PuTTY از SCP استفاده کرد؟
از طریق PuTTY میتوان SCP را روی ویندوز اجرا کرد. هریک از خطهای دستوری را باید با pscp –scp شروع کنید.