دستور scp
دستور scp برگرفته از عبارت Secure Copy و ابزاری در خط فرمان سیستم عامل می باشد. از این دستور برای کپی فایل استفاده می شود. مزیت دستور scp، ایجاد امنیت بالا در فرایند کپی می باشد.
با اجرای دستور scp در خط فرمان سیستم محلی(Local)، میتوان فایل را :
در خود سیستم، از مکانی به مکان دیگر کپی نمود. (مانند دستور cp)
از سیستم محلی به یک سیستم راه دور (Remote) کپی نمود.
از سیستم راه دور به سیستم محلی کپی نمود.
بین دو سیستم راه دور، کپی نمود.
دستور scp برای انجام فرایند کپی، از SSH (Secure Shell Connection) استفاده می کند. به همین دلیل در اجرای دستور، نیاز به کلمه عبور می باشد.
با بیان چند مثال، نحوه ی استفاده و کاربرد تعدادی از سوییچ های دستور scp را بررسی می کنیم.
مثال 1 :
کپی فایل در داخل یک سیستم :
[root@mypc ~]# scp /tmp/password.txt /home/masih/
شرح دستور :
با توجه به پرامپت مشخص است که کاربر root از Home Directory خود، دستور را اجرا می کند. این دستور فایلی با نام password.txt را از مسیر tmp/ به مسیر home/masih/ کپی می کند.
نکته : در استفاده از دستور scp باید دقت نمود، زیرا در صورت وجود فایل همنام در مقصد، فرایند کپی بدون هشدار انجام شده و فایل مبدأ جایگزین فایل قبلی می شود.
نکته : در اجرای دستور کپی، حداقل سطح دسترسی برای فایل مبدأ مجوز خواندن (r--) و برای مسیر مقصد نیز مجوز نوشتن و اجرا (wx-) می باشد.
مثال 2 :
کپی فایل از سیستم محلی به یک سیستم راه دور :
[root@mypc ~]# scp /tmp/password.txt root@192.168.10.50:/var
root@192.168.10.50's password:
password.txt 41% 357MB 11.2MB/s 00:44 ETA
شرح دستور :
با درج کلمه عبور، فرایند کپی آغاز می شود. در سطر بعد، روند کپی برای کاربر قابل مشاهده می باشد. در این سطر بترتیب از سمت چپ به راست : نام فایل، میزان فرایند انجام شده بصورت درصد، حجم انتقال یافته، سرعت انتقال و میزان زمان باقیمانده تا اتمام فرایند کپی نشان داده می شود.
دستور بالا، فایلی با نام password.txt را از مسیر tmp/ به یک سیستم با آدرس 192.168.10.50 و مسیر var/ کپی می کند. در قسمت دوم دستور بترتیب، نام کاربر، کاراکتر @، آدرس آی پی سیستم مقصد، کاراکتر : و مسیر مقصد مشخص میشوند. بین اجزا قسمت دوم دستور، نباید کاراکتر فاصله قرار گیرد.
نکته : اگر کاربری که دستور را اجرا میکند و کاربری که با آن به سیستم مقصد متصل میشود، همنام باشند، میتوان نام کاربر را از قسمت دوم دستور حذف نمود. در نتیجه، دستور بالا را می توان بصورت زیر هم استفاده نمود :
[root@mypc ~]# scp /tmp/password.txt 192.168.10.50:/var
مثال 3 :
کپی چند فایل با دستور scp :
برای این منظور می توان، نام فایلها را با یک کاراکتر فاصله، در قسمت اول دستور مشخص کرد.
[root@mypc ~]# scp /etc/*.conf password.txt masih@192.168.10.50:/home/masih
با دستور بالا، تمامی فایلهای مسیر etc/ که پسوند conf. دارند، بهمراه فایل password.txt به دایرکتوری home/masih/ در سیستم مقصد کپی می شوند.
مثال 4 :
کپی دایرکتوری با دستور scp :
برای کپی یک دایرکتوری بهمراه زیرمجموعه ی آن، می توان از سوییچ r استفاده نمود.
[root@mypc ~]# scp -r video masih@192.168.10.50:/home/masih
با دستور بالا دایرکتوری video و تمام زیرمجموعه ی آن، به سیستم مقصد کپی می شوند.
نکته : در صورت عدم استفاده از سوییچ r برای کپی یک دایرکتوری، پیام زیر نمایش می یابد.
[root@mypc ~]# scp video masih@192.168.10.50:/home/masih
masih@192.168.10.50's password:
video: not a reular file
نکته : در سیستم محلی، برای آدرس دهی جهت تعیین فایل یا مسیر کپی، میتوان از آدرس نسبی یا مطلق استفاده نمود. اما برای سیستم راه دور فقط باید از آدرس مطلق استفاده کرد.
نکته : اگر در دستور scp بعد از کاراکتر : مسیری درج نشود، فایل در Home Directory کاربر قرار می گیرد.
[root@mypc ~]# scp /tmp/password.txt masih@192.168.10.50:
با دستور بالا فایل password.txt در Home Directory کاربر masih قرار می گیرد.
مثال 5 :
کپی فایل، بهمراه تغییر نام فایل در مقصد :
برای این منظور، میتوان نام جدید را در انتهای مسیر سیستم مقصد درج نمود.
[root@mypc ~]# scp /tmp/password.txt masih@192.168.10.50:/home/masih/new_password.txt
با دستور بالا، فایل password.txt در سیستم مقصد با نام new_password.txt دیده می شود.
نکته : روش بالا برای دایرکتوری ها کاربرد ندارد.
[root@mypc ~]# scp -r /tmp/music 192.168.10.50:/root/mp3
با اجرای دستور بالا، اگر در مقصد دایرکتوری mp3 وجود نداشته باشد، این دایرکتوری ایجاد شده و دایرکتوری music در آن قرار می گیرد.
مثال ۶ :
اجرای دستور scp با استفاده از پورتی خاص :
همانطور که در ابتدا اشاره شد، دستور scp از پروتکل SSH برای ایجاد ارتباط امن، بین دو سیستم استفاده می کند. در حالت پیشفرض، SSH بر روی پورت 22 تنظیم شده است. کاربران میتوانند با تغییر فایل پیکربندی SSH ، نسبت به تغییر این پورت اقدام نمایند. (فایل پیکربندی = etc/ssh/sshd_config/ )
برای کپی یک فایل با استفاده از پورت 2120، می توان از سوییچ P استفاده نمود.
[root@mypc ~]# scp -P 2120 /tmp/password.txt masih@192.168.10.50:/home/masih
نکته : در صورت عدم تعیین پورت در استفاده از دستور scp، برای ایجاد ارتباط با سروری که پورت پیشفرض آن تغییر یافته است، پیام زیر نمایش می یابد.
[root@mypc ~]# scp /tmp/password.txt masih@192.168.10.50:/home/masih
ssh: connect to host 192.168.10.50 port 22: Connection timed out
lost connection
مثال ۷ :
عدم نمایش روند اجرای دستور scp :
[root@mypc ~]# scp -q /tmp/password.txt masih@192.168.10.50:/home/masih
masih@192.168.10.50's password:
[root@mypc ~]#
در دستور بالا، جزییات اجرای فرایند کپی نمایش داده نمیشود و بعد از اتمام عملیات کپی، خط فرمان در اختیار کاربر قرار می گیرد. البته استفاده از سوییچ q، تأثیری در نمایش پیامهای مربوط به بروز خطا ندارد.
مثال 8 :
نمایش جزییات بیشتر، از فرایند اجرای دستور scp :
برای این منظور، می توان از سوییچ v استفاده نمود.
[root@mypc ~]# scp -v /tmp/password.txt masih@192.168.10.50:/home/masih
Executing: program /usr/bin/ssh host 192.168.10.50, user masih, command scp -v -t /root
OpenSSH_7.5p1, OpenSSL 1.1.0f-fips 25 May 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf
debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config
debug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for *
debug1: /etc/ssh/ssh_config line 57: Deprecated option "useroaming"
debug1: Connecting to 192.168.10.50 [192.168.10.50] port 22.
debug1: Connection established.
debug1: Authenticating to 192.168.10.50:22 as 'masih'
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:GS8TI5ytg9BKrzJL7feMogZujG80rrsIHrebGcunaUo
debug1: Host '[192.168.10.50]:22' is known and matches the ECDSA host key.
debug1: Next authentication method: password
masih@192.168.10.50's password:
debug1: Authentication succeeded (password).
Authenticated to 192.168.10.50 ([192.168.10.50]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
password.txt 100% 854MB 11.1MB/s 01:17
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 896293160, received 139064 bytes, in 77.4 seconds
Bytes per second: sent 11580266.0, received 1796.7
debug1: Exit status 0
مثال 9 :
کپی فایل به همراه خصوصیاتش :
با استفاده از سوییچ p در دستور scp علاوه بر کپی خود فایل، خصوصیات فایل اعم از سطح دسترسی فایل، زمان Access Time و Modification Time نیز به سیستم مقصد منتقل می شوند.
[root@mypc ~]# scp -p masih@192.168.10.50:/home/masih/linux.doc /home/masih
مثال 10 :
کپی فایل از سیستم راه دور به سیستم محلی (با اجرای دستور در سیستم محلی) :
[root@mypc ~]# scp -P 2020 masih@192.168.10.50:/home/masih/linux.doc /home/masih
masih@192.168.10.50's password:
دستور بالا از طریق پورت 2020 به سیستم 192.168.10.50 دسترسی پیدا کرده و فایل linux.doc را در سیستم محلی کپی می کند.
مثال 11 :
کپی فایل بین دو سیستم راه دور (با اجرای دستور در سیستم محلی) :
* حالت اول : پورت پیشفرض هر دو سیستم باز باشد. (پورت 22)
[root@mypc ~]# scp masih@192.168.10.50:/home/masih/linux.doc ahmad@192.168.10.60/home/ahmad
masih@192.168.10.50's password:
ahmad@192.168.10.60's password:
linux.doc 100% 304MB 57.0MB/s 00:10
Connection to 192.168.10.50 closed.
با اجرای دستور، ابتدا کلمه عبور سیستم مبدا و سپس سیستم مقصد درخواست می شود و در صورت درستی آنها، فرایند کپی انجام می شود.
* حالت دوم : در سیستم مبدأ، پورت 22 بسته و پورت 2001 باز باشد. و پورت 22 بر روی سیستم مقصد باز باشد.
[root@mypc ~]# scp -P 2001 masih@192.168.10.50:/home/masih/linux.doc ahmad@192.168.10.60/home/ahmad
masih@192.168.10.50's password:
ahmad@192.168.10.60's password:
linux.doc 100% 304MB 57.0MB/s 00:10
Connection to 192.168.10.50 closed.
نکته : برای حالتی که پورت 22 در سیستم مقصد بسته باشد، راه حل بهینه ای یافت نشد. شاید سادهترین روش، کپی فایل به سیستم محلی و سپس به سیستم مقصد باشد.