آموزش دستور SCP لینوکس: انتقال امن فایل بین سرورها
موضوعاتی که در این مقاله به آنها پرداخته خواهد شد، به شرح زیر است:
در دنیای مدیریت سرورهای لینوکس، انتقال امن فایل با SCP یکی از رایجترین و حیاتیترین نیازهاست. اگر به دنبال آموزش دستور SCP لینوکس برای کپی فایل بین سرورهای لینوکس به صورت امن و کارآمد هستید، این مقاله جامع برای شماست.
مقدمهای که باید برای scp و انتقال امن فایل بدانید
پروتکل SCP یا Secure Copy Protocol ابزاری قدرتمند است که به شما امکان میدهد فایلها و دایرکتوریها را به صورت رمزنگاری شده بین دو سیستم (چه روی یک شبکه محلی و چه روی سرورهای راه دور) جابجا کنید. در این راهنمای جامع که توسط تیم پشتوار سرور برای شما تهیه شده و در وبلاگ هاستینگ ما منتشر میشود، به بررسی دقیق مثالهای کاربردی دستور scp میپردازیم تا شما به راحتی بر فرآیند انتقال امن فایل با SCP مسلط شوید.
SCP چیست؟
SCP مخفف Secure Copy Protocol است و همانطور که از نامش پیداست، ابزاری برای انتقال امن فایل با SCP است. این پروتکل بر پایه SSH (Secure Shell) ساخته شده و به شما امکان میدهد تا فایلها و دایرکتوریها را به صورت رمزنگاریشده بین سیستمهای مختلف لینوکس جابجا کنید. هدف اصلی scp، فراهم آوردن یک روش امن و کارآمد برای کپی فایل بین سرورهای لینوکس است، به طوری که تمامی دادهها در طول مسیر انتقال، محافظت شده باقی بمانند. در ادامه این آموزش دستور SCP لینوکس، با انواع مثالهای کاربردی دستور scp، نحوه استفاده از این ابزار را فرا خواهید گرفت.
پیشنیازهای استفاده از SCP در لینوکس
قبل از اینکه بتوانید از دستور scp برای انتقال امن فایل با SCP استفاده کنید، باید مطمئن شوید که پیشنیازهای لازم فراهم است:
- دسترسی SSH: همانطور که گفته شد، scp بر بستر SSH کار میکند. بنابراین، برای کپی فایل بین سرورهای لینوکس، باید دسترسی SSH به هر دو سرور مبدأ و مقصد را داشته باشید. این به معنای داشتن نام کاربری و رمز عبور (یا کلید SSH) معتبر برای هر دو سیستم است.
- نصب OpenSSH: معمولاً پکیج OpenSSH به طور پیشفرض روی اکثر توزیعهای لینوکس نصب است، اما اگر با خطایی مواجه شدید، مطمئن شوید که openssh-client و openssh-server روی سیستمهای مورد نظر نصب باشند. این از جمله اولین مراحل در آموزش دستور SCP لینوکس است.
سینتکس پایه و پارامترهای مهم دستور scp در آموزش دستور SCP لینوکس
قبل از پرداختن به مثالهای کاربردی دستور scp، بیایید با سینتکس اصلی این ابزار برای انتقال امن فایل با SCP آشنا شویم. سینتکس پایه دستور scp برای کپی فایل بین سرورهای لینوکس به شکل زیر است:
scp [OPTIONS] [user@]source_host:]source_file [user@]destination_host:]destination
- [OPTIONS]: پارامترهای اضافی که رفتار دستور scp را تغییر میدهند.
- [user@]SRC_HOST:]file1[@user]: فایل مبدأ، که میتواند روی سیستم محلی یا یک سرور راه دور باشد.
- [user@]DEST_HOST:]file2[@user]: مسیر مقصد، که میتواند روی سیستم محلی یا یک سرور راه دور باشد.
گزینههای پرکاربرد دستور SCP در آموزش دستور SCP لینوکس
دستور scp به تنهایی قدرتمند است، اما با استفاده از پارامترها (آپشنها)ی آن میتوانید کنترل بسیار بیشتری روی فرآیند انتقال داشته باشید. در ادامه، با چند مورد از کاربردیترین آپشنها که در آموزش دستورهای SCP لینوکس به کارتان میآیند، آشنا میشویم:
- -v: حالت Verbose یا پرحرف. باعث میشود اطلاعات مربوط به فرآیند اتصال و انتقال نمایش داده شود که برای دیباگ کردن مشکلات بسیار مفید است.
- -p: تاریخ و زمان ایجاد و آخرین ویرایش و همچنین سطح دسترسی فایل اصلی را حفظ میکند.
- -C: فشردهسازی را فعال میکند. این گزینه میتواند سرعت انتقال را در شبکههای کند افزایش دهد.
- -c cipher: به شما اجازه میدهد تا الگوریتم رمزنگاری دیگری (مانند 3des یا blowfish) را به جای الگوریتم پیشفرض (AES-128) انتخاب کنید.
- -l limit: پهنای باند انتقال را به کیلوبیت بر ثانیه (Kbps) محدود میکند.
- -P port: به شما اجازه میدهد تا از یک پورت SSH متفاوت به جای پورت پیشفرض ۲۲ استفاده کنید (توجه داشته باشید که -P بزرگ است).
- -r: به صورت بازگشتی (recursively) دایرکتوریها و تمام محتویات آنها را کپی میکند.
- -q: حالت Quiet یا ساکت. باعث میشود نوار پیشرفت و پیامهای غیرضروری نمایش داده نشوند.
- -F ssh_config: به شما اجازه میدهد تا یک فایل پیکربندی SSH متفاوت را مشخص کنید.
۱۰ مثال کاربردی از آموزش دستور SCP لینوکس
اکنون که با ساختار کلی و آپشنهای دستور آشنا شدیم، وقت آن است که به سراغ بخش عملی آموزش دستورهای SCP لینوکس برویم. بهترین راه برای یادگیری، تمرین است! در ادامه، ۱۰ سناریوی رایج و مثال کاربردی دستور scp را با هم مرور میکنیم تا بتوانید هر فایلی را با اطمینان کامل جابجا کنید.
۱. کپی فایل از هاست محلی به سرور راه دور (Local to Remote)
این سناریو، یعنی آپلود فایل از کامپیوتر شخصی به سرور، احتمالاً پرکاربردترین وظیفه شما خواهد بود و پایهایترین حالت برای کپی فایل بین سرورهای لینوکس محسوب میشود.
برای مثال، فرض کنید میخواهیم فایل scp-cheatsheet.pdf را از سیستم فعلی خود به پوشهی /home/tecmint/ در سرور 192.168.0.183 (با نام کاربری tecmint) منتقل کنیم. دستور آن به این شکل خواهد بود:
$ scp -v scp-cheatsheet.pdf tecmint@192.168.0.183:/home/tecmint/.
پس از اجرای دستور، از شما رمز عبور کاربر user در سرور remote_host پرسیده میشود.
نمونه خروجی:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/. OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_xmss type -1 ...
۲. کپی فایل از سرور راه دور به هاست محلی (Remote to Local)
حالا بیایید حالت برعکس را انجام دهیم: دانلود یک فایل از سرور به کامپیوتر شخصی. این کار نیز به همان سادگی آپلود است؛ کافیست جای مبدأ و مقصد را در دستور عوض کنید.
در مثال زیر، میخواهیم فایل ssh-cheatsheet.pdf را از پوشهی /home/ravi/ در سرور 192.168.0.183 برداشته و آن را در پوشهی محلی فعلی (/home/tecmint/) خود کپی کنیم:
$ scp -v tecmint@192.168.0.183:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
نمونه خروجی:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 ...
۳. کپی فایل بین دو سرور راه دور (Remote to Remote)
انتقال امن فایل با SCP این قابلیت قدرتمند را فراهم میکند که فایلها را مستقیماً بین دو سرور لینوکس کپی کنید.
این ویژگی برای صرفهجویی در زمان و پهنای باند فوقالعاده است.
در مثال زیر، فایل ssh-cheatsheet.pdf را از سرور راه دور اول (192.168.0.183) به سرور راه دور دوم (192.168.xx.xx) منتقل میکنیم:
$ scp -v tecmint@192.168.0.183:/home/ravi/ssh-cheatsheet.pdf tecmint@192.168.0.102:/home/anusha/.
نکته بسیار مهم: مسیر عبور ترافیک در انتقال امن فایل با SCP
توجه داشته باشید که وقتی دستور کپی فایل بین سرورهای لینوکس (یعنی دستور scp) را برای انتقال امن فایل با SCP بین دو سرور راه دور از کامپیوتر محلی خودتان اجرا میکنید، ترافیک در واقع از سیستم شما عبور میکند (یعنی فایل ابتدا از سرور اول به کامپیوتر شما و سپس از کامپیوتر شما به سرور دوم منتقل میشود). این نکته در آموزش دستور SCP لینوکس و هنگام بررسی مثالهای کاربردی دستور scp بسیار حائز اهمیت است.
برای یک انتقال واقعاً مستقیم که از پهنای باند سیستم محلی شما استفاده نکند و یک کپی فایل بین سرورهای لینوکس به صورت بهینه انجام شود، باید ابتدا با SSH وارد یکی از سرورها شوید و سپس دستور scp را از مبدأ به مقصد، روی همان سرور اجرا کنید. این روش، یکی از مهمترین مثالهای کاربردی دستور scp برای بهینهسازی مسیر ترافیک در آموزش دستور SCP لینوکس محسوب میشود.
۴. کپی فایل با حفظ تاریخ و زمان اصلی (Preserve Timestamps) با SCP لینوکس
به طور پیشفرض، وقتی فایلی را با دستور scp کپی میکنید، تاریخ و زمان آن بهروزرسانی میشود. اما گاهی لازم است مشخصات فایل اصلی، مانند تاریخ آخرین ویرایش (modification time)، زمان آخرین دسترسی (access time) و سطوح دسترسی (permissions)، دستنخورده باقی بماند (مثلاً برای عملیات بکاپگیری یا همگامسازی). این موضوع در آموزش دستور SCP لینوکس و هنگام انتقال امن فایل با SCP بسیار مهم است.
برای این کار در کپی فایل بین سرورهای لینوکس، کافیست از پارامتر -p استفاده کنید. این آپشن کوچک و کاربردی تضمین میکند که متادیتای فایل شما در مقصد دقیقاً مشابه مبدأ باشد. این یکی از مثالهای کاربردی دستور scp است که به شما کمک میکند انتقال امن فایل با SCP را با حفظ جزئیات کامل انجام دهید.
$ scp -p scp-cheatsheet.pdf tecmint@192.168.0.183:/home/tecmint/.
نمونهه خروجی:
tecmint@192.168.0.183's password: scp-cheatsheet.pdf
۵. فشردهسازی با scp هنگام کپی کردن فایلها
اگر میخواهید فایلهای حجیم را روی یک شبکهی کند منتقل کنید، میتوانید با استفاده از فشردهسازی، سرعت انتقال امن فایل با SCP را به شکل چشمگیری افزایش دهید. پارامتر -C دقیقاً همین کار را برای شما در آموزش دستور SCP لینوکس انجام میدهد.
این آپشن به دستور scp دستور میدهد که فایل را قبل از ارسال فشرده کرده و پس از رسیدن به مقصد، به طور خودکار به حالت اولیهی خود بازگرداند. در واقع، فایل فقط در طول مسیر شبکه حجم کمتری دارد و در نهایت بدون هیچ تغییری در مقصد ذخیره میشود. این کار برای بهینهسازی انتقال امن فایل با SCP در شبکههای با پهنای باند کم فوقالعاده است و یکی از مثالهای کاربردی دستور scp برای کپی فایل بین سرورهای لینوکس به شمار میرود.
به این دستورها SCP لینوکس نگاهی بیندازید. در اینجا از یک فایل ۹۳ مگابایتی استفاده شده است.
انتقال فایل بدون فشردهسازی:
$ scp -pv messages.log mrarianto@202.x.x.x:.
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password mrarianto@202.x.x.x's password: debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: Sending command: scp -v -p -t. File mtime 1323853868 atime 1380425711 Sending file timestamps: T1323853868 0 1380425711 0 messages.log 100% 93MB 58.6KB/s 27:05 Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds Bytes per second: sent 58758.4, received 15.6 debug1: Exit status 0
کپی کردن فایلها بدون پارامتر -C معادل ۱۶۶۱٫۳ ثانیه طول میکشد. میتوانید نتیجه را با دستور زیر که از پارامتر -C استفاده میکند، مقایسه کنید.
انتقال فایل با فشردهسازی:
$ scp -Cpv messages.log mrarianto@202.x.x.x:.
نمونه خروجی:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Host '202.x.x.x' is known and matches the RSA host key. debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Next authentication method: publickey debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password mrarianto@202.x.x.x's password: debug1: Enabling compression at level 6. debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: channel 0: new [client-session] debug1: Sending command: scp -v -p -t . File mtime 1323853868 atime 1380428748 Sending file timestamps: T1323853868 0 1380428748 0 Sink: T1323853868 0 1380428748 0 Sending file modes: C0600 97517300 messages.log messages.log 100% 93MB 602.7KB/s 02:38 Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds Bytes per second: sent 54813.9, received 97.0 debug1: Exit status 0 debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09 debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
همانطور که در مثالهای کاربردی دستور scp دیدیم، تأثیر فشردهسازی در انتقال امن فایل با SCP میتواند چشمگیر باشد و سرعت کپی فایل بین سرورهای لینوکس را چندین برابر افزایش دهد. بنابراین، هر زمان که قصد دارید فایلهای حجیم (مخصوصاً فایلهای متنی) یا تعداد زیادی فایل را در شبکه جابجا کنید، استفاده از پارامتر -C در آموزش دستور SCP لینوکس به شدت توصیه میشود تا در زمان خود صرفهجویی کنید.
چه زمانی فشردهسازی در SCP لینوکس بیفایده است؟
به این نکته کلیدی توجه کنید: فشردهسازی در انتقال امن فایل با SCP روی فایلهایی که از قبل فشرده شدهاند، تقریباً هیچ تأثیری ندارد. تلاش برای فشردهکردن مجدد فایلهایی مانند zip، tar، bz2، jpeg و iso عملاً بیفایده است و بهبودی در سرعت کپی فایل بین سرورهای لینوکس ایجاد نخواهد کرد. این قابلیت، بیشترین تأثیر را روی فایلهای متنی (مانند سورس کد، لاگها) و دادههای خام دارد و یکی از نکاتی است که در آموزش دستور SCP لینوکس و هنگام بررسی مثالهای کاربردی دستور scp باید به آن توجه داشت.
۶. تغییر الگوریتم رمزنگاری (Change Cipher) در آموزش دستور SCP لینوکس
به طور پیشفرض، دستور scp برای تضمین انتقال امن فایل با SCP، دادههای شما را با الگوریتم AES-128 رمزنگاری میکند که معمولاً یک تعادل خوب بین امنیت و سرعت است.
اما در شرایط خاص، ممکن است بخواهید این الگوریتم را تغییر دهید. برای این کار از پارامتر -c (حرف کوچک c، که با -C برای فشردهسازی متفاوت است) استفاده میشود. دو دلیل اصلی برای این کار در کپی فایل بین سرورهای لینوکس وجود دارد:
- افزایش امنیت: میتوانید یک الگوریتم قویتر مانند aes256-ctr را انتخاب کنید.
- افزایش سرعت: در شبکههای بسیار سریع که پردازندهی سرور (CPU) به گلوگاه سرعت تبدیل میشود، استفاده از یک الگوریتم سبکتر مانند blowfish-cbc یا arcfour میتواند سرعت انتقال امن فایل با SCP را به شکل محسوسی بهبود بخشد.
یک نمونه کاربردی دستور scp در زمینه تغییر الگوریتم رمزنگاری:
$ scp -c 3des Label.pdf mrarianto@202.x.x.x:. mrarianto@202.x.x.x's password: Label.pdf 100% 3672KB 282.5KB/s 00:13
در مثال بالا، scp -c 3des … به دستور scp فرمان میدهد که از الگوریتم 3des برای رمزگذاری فایل استفاده کند. این یک جنبه مهم در آموزش دستور SCP لینوکس برای انتقال امن فایل با SCP است.
باز هم تأکید میکنیم که این پارامتر با حرف c کوچک (-c) مشخص میشود تا با آپشن فشردهسازی که با C بزرگ (-C) است، اشتباه گرفته نشود. این تمایز برای کپی فایل بین سرورهای لینوکس به صورت صحیح و ایمن اهمیت دارد.
۷. محدود کردن پهنای باند (Limit Bandwidth) در آموزش دستور SCP لینوکس
گاهی اوقات شما نمیخواهید که عملیات کپی فایل بین سرورهای لینوکس، تمام پهنای باند شبکه را اشغال کند و باعث کندی سایر سرویسها شود؛ به خصوص اگر در حال اجرای یک اسکریپت خودکار برای انتقال امن فایل با SCP در پسزمینه هستید.
در چنین مواقعی، پارامتر -l (حرف کوچک L) به شما اجازه میدهد تا یک سقف سرعت برای دستور scp تعیین کنید. این یکی از مثالهای کاربردی دستور scp است که به شما کنترل بیشتری بر روی فرآیند انتقال امن فایل با SCP میدهد.
نکته بسیار مهم: این مقدار بر حسب کیلوبیت بر ثانیه (Kilobit/sec) مشخص میشود. برای مثال، اگر میخواهید سرعت را به ۵۰ کیلوبایت بر ثانیه (۵۰ KB/s) محدود کنید، باید مقدار را ۴۰۰ (یعنی ۵۰ * ۸) وارد نمایید.
$ scp -l 400 Label.pdf mrarianto@202.x.x.x:. mrarianto@202.x.x.x's password: Label.pdf 100% 3672KB 50.3KB/s 01:13
بنابراین در مثال کاربردی دستور scp، مقدار ۴۰۰ به معنای محدود کردن سرعت انتقال امن فایل با SCP به ۴۰۰ کیلوبیت بر ثانیه است. این یکی از جنبههای مهم در آموزش دستور SCP لینوکس برای مدیریت پهنای باند هنگام کپی فایل بین سرورهای لینوکس است.
برای اینکه درک این موضوع سادهتر شود، این فرمول را به خاطر بسپارید:
(سرعت مورد نظر شما به کیلوبایت) × ۸ = (مقداری که باید برای پارامتر -l وارد کنید)
به همین دلیل است که برای رسیدن به سقف سرعت ۵۰ KB/s، ما از مقدار ۴۰۰ (یعنی ۵۰ * ۸) استفاده کردیم.
۸. استفاده از پورت متفاوت برای SCP (Use a Different Port) در آموزش دستور SCP لینوکس
از آنجایی که دستور scp بر بستر پروتکل SSH کار میکند، به طور پیشفرض از پورت ۲۲ برای تمام اتصالات خود استفاده میکند. اما یکی از اولین و رایجترین اقدامات امنیتی در مدیریت سرور، تغییر این پورت پیشفرض برای کاهش حملات خودکار (bot attacks) است. این موضوع در انتقال امن فایل با SCP و کپی فایل بین سرورهای لینوکس اهمیت زیادی دارد.
اگر شما هم پورت SSH سرور خود را تغییر دادهاید، باید با استفاده از پارامتر -P (حتماً دقت کنید که P بزرگ است، نه p کوچک) پورت جدید را به scp اطلاع دهید. این یکی از مهمترین مثالهای کاربردی دستور scp برای برقراری اتصال موفق است.
برای مثال، فرض کنیم سرور ما به جای پورت ۲۲، روی پورت ۲۲۴۹ کار میکند. دستور اتصال به شکل زیر خواهد بود:
$ scp -P 2249 Label.pdf mrarianto@202.x.x.x:. mrarianto@202.x.x.x's password: Label.pdf 100% 3672KB 262.3KB/s 00:14
یادتان باشد:
P بزرگ (-P) برای پورت (Port)
p کوچک (-p) برای حفظ مشخصات (preserve)
این دو پارامتر را با هم اشتباه نگیرید؛ این یکی از رایجترین خطاها هنگام کار با scp است.
۹. کپی بازگشتی دایرکتوریها (Copy Directories Recursively) با SCP لینوکس
یکی از نیازهای بسیار رایج در آموزش دستور SCP لینوکس، کپی کردن یک پوشه (Directory) به همراه تمام فایلها و زیرپوشههای داخل آن است. به جای اینکه فایلها را یکییکی منتقل کنید، میتوانید با یک دستور ساده، کل ساختار پوشه را به صورت یکجا جابجا کنید. این قابلیت برای انتقال امن فایل با SCP و کپی فایل بین سرورهای لینوکس در سناریوهای مختلف ضروری است.
برای این کار، از پارامتر -r (مخفف recursive یا بازگشتی) استفاده میکنیم. این آپشن به دستور scp میگوید که وارد پوشهی مشخصشده شود و هر آنچه را که درون آن است، با حفظ ساختار، به مقصد کپی کند. این یک روش فوقالعاده کارآمد برای کپی فایل بین سرورهای لینوکس در حجم بالاست و یکی از مهمترین مثالهای کاربردی دستور scp محسوب میشود.
$ scp -r documents mrarianto@202.x.x.x:. mrarianto@202.x.x.x's password: Label.pdf 100% 3672KB 282.5KB/s 00:13 scp.txt 100% 10KB 9.8KB/s 00:00
پس از اجرای دستور، پوشهی documents به همراه تمام محتویاتش در سرور مقصد ظاهر میشود.
نکتهی مهم این است که اگر این پوشه در مقصد وجود نداشته باشد، scp آن را به صورت خودکار برای شما ایجاد میکند.
۱۰. غیرفعال کردن پیامهای پیشرفت (Disable Progress Messages) در SCP لینوکس
هنگام استفاده از دستور scp در اسکریپتهای خودکار (automation scripts) یا Cron Job ها، شما معمولاً به نوار پیشرفت و پیامهای اطلاعاتی نیازی ندارید. این خروجیهای اضافی میتوانند لاگهای شما را شلوغ کرده و تحلیل نتایج انتقال امن فایل با SCP را دشوار کنند.
برای جلوگیری از این وضعیت، میتوانید scp را با استفاده از پارامتر -q (مخفف Quiet) در «حالت سکوت» اجرا کنید. این آپشن تمام خروجیهای نمایشی، از جمله نوار پیشرفت و هشدارهای غیرحیاتی را پنهان میکند. scp کار خود را در سکوت انجام میدهد و فقط در صورت بروز خطای جدی، پیامی را نمایش خواهد داد. این ویژگی، scp را برای استفاده در محیطهای غیرتعاملی و اسکریپتنویسی ایدهآل میسازد و یکی از مثالهای کاربردی دستور scp برای کپی فایل بین سرورهای لینوکس بدون نمایش خروجی است. در اینجا یک مثال آورده شده است:
$ scp -q Label.pdf mrarianto@202.x.x.x:. mrarianto@202.x.x.x's password: pungki@mint ~/Documents $
همانطور که انتظار میرود، پس از اجرای دستور در حالت سکوت، تا زمانی که انتقال موفقیتآمیز باشد، هیچ پیامی نخواهید دید و کنترل بلافاصله به خط فرمان بازمیگردد.
این سکوت، دقیقاً همان رفتار مطلوبی است که در اسکریپتنویسی به دنبال آن هستیم.
سناریوی پیشرفته: استفاده از SCP از طریق پراکسی (Proxy)
سرور پراکسی معمولاً در محیطهای اداری استفاده میشود. به طور پیشفرض، SCP برای کار با پراکسی پیکربندی نشده است. وقتی محیط شما دارای پراکسی است، باید به SCP «بگویید» که با پراکسی ارتباط برقرار کند.
سناریو به این صورت است: آدرس پراکسی 10.0.96.6 و پورت پراکسی 8080 است. این پراکسی همچنین از احراز هویت (authentication) استفاده میکند. ابتدا، باید فایل ~/.ssh/config را ایجاد کنید. دوم، این دستور را داخل آن قرار دهید.
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
سپس باید فایل ~/.ssh/proxyauth را ایجاد کنید که حاوی موارد زیر است:
myusername:mypassword
پس از آن، میتوانید طبق معمول و به صورت شفاف (transparently) از scp استفاده کنید.
لطفاً توجه داشته باشید که ابزار corkscrew ممکن است هنوز روی سیستم شما نصب نشده باشد. در سیستم Linux Mint من، ابتدا باید آن را با استفاده از رویه نصب استاندارد لینوکس مینت نصب کنم:
$ apt-get install corkscrew
برای سیستمهای مبتنی بر yum، کاربران میتوانند corkscrew را با استفاده از دستور yum زیر نصب کنند:
# yum install corkscrew
نکته دیگر این است که فایل ~/.ssh/proxyauth حاوی “نام کاربری” و “رمز عبور” شما به صورت متن ساده (clear-text) است. لطفاً اطمینان حاصل کنید که این فایل فقط توسط شما قابل دسترسی باشد.
انتخاب یک فایل ssh_config متفاوت
برای کاربرانی که مدام بین شبکههای مختلف، مانند محیط کار (با پراکسی) و شبکههای عمومی (بدون پراکسی)، جابجا میشوند، ویرایش مداوم فایل تنظیمات SSH کاری زمانبر و مستعد خطا است.
یک راه حل هوشمندانه، ایجاد فایلهای کانفیگ (ssh_config) مجزا برای هر سناریو است. به این ترتیب، میتوانید یک فایل برای تنظیمات محل کار و دیگری برای استفاده در شبکههای دیگر داشته باشید.
سپس، با استفاده از پارامتر -F، میتوانید در لحظهی اجرای دستور، فایل کانفیگ مورد نظر خود را به scp معرفی کنید. این روش به شما اجازه میدهد تا بدون تغییر در فایلهای اصلی، به سادگی بین پروفایلهای مختلف شبکه جابجا شوید.
$ scp -F /home/pungki/proxy_ssh_config Label.pdf mrarianto@202.x.x.x:. mrarianto@202.x.x.x's password: Label.pdf 100% 3672KB 282.5KB/s 00:13
به طور پیشفرض، فایل ssh_config هر کاربر در مسیر ~/.ssh/config قرار میگیرد. ایجاد یک فایل ssh_config خاص برای سازگاری با پراکسی، جابجایی بین شبکهها را آسانتر میکند.
وقتی در شبکه شرکت هستید، میتوانید از پارامتر “-F” استفاده کنید. وقتی در یک شبکه عمومی هستید، میتوانید از این پارامتر صرفنظر کنید.
جمعبندی: SCP، یک ابزار ضروری در جعبهابزار مدیر سیستم
در این راهنمای جامع، ما سفری از مبانی تا نکات پیشرفتهی آموزش دستورهای SCP لینوکس داشتیم و با مرور مثال های کاربردی، دیدیم که این ابزار چگونه میتواند فرآیند انتقال امن فایل با SCP را ساده و مؤثر کند.
تسلط بر scp و آپشنهای متنوع آن، یک مهارت کلیدی برای مدیریت روزمرهی سرور است. این توانایی، از پشتیبانگیریهای منظم گرفته تا انتقال دادهها به یک دیسک جدید، به شما قدرت و انعطافپذیری بالایی در کپی فایل بین سرورهای لینوکس میبخشد.
در نهایت، برای انتقال امن فایلها در محیطهای لینوکسی، دستور scp گزینهای ساده و قابلاعتماد است که با استفاده از SSH امنیت را تضمین میکند. با این حال، در سناریوهای پیشرفتهتر مانند همگامسازی پوشهها، ادامه انتقال پس از قطعی، و بهینهسازی پهنای باند، ابزار قدرتمند rsync انتخابی هوشمندانهتر محسوب میشود. rsync با الگوریتم انتقال دلتا و قابلیتهای انعطافپذیر، جایگزینی مدرن برای scp به شمار میآید. برای مطالعه بیشتر، به مستندات رسمی scp و rsync در سایت لینوکس مراجعه کنید.
تیم پشتوار سرور امیدوار است که این آموزش جامع، به شما در انجام وظایفتان کمک کرده باشد. اگر به دنبال زیرساختی امن و پرسرعت برای پیادهسازی این مهارتها هستید، پیشنهاد میکنیم نگاهی به پلنهای سرور مجازی و اختصاصی ما بیندازید. در صورت داشتن سؤال و یا نظری لطفا در قسمت نظرات با ما در ارتباط یاشید