دستور scp کوتاه شده Secure copy برای کپی کردن اطلاعات به صورت امن بین سیستم ها با کمک پرتکل ssh است و از همون مقدار امنیت که پرتکل ssh ایجاد میکند در کپی کردن فایل ها بهره می برد .
ساده ترین شکل استفاده از دستور scp به شکل زیر هست :
در زیر یک فایل رو از سیستم خودمون به کامپیوتر با ایپی 172.16.134.160 انتقال می دیم
aliabry@lp:~$ scp /home/aliabry/share/video.mp4 ali@172.16.134.160:/home/ali ali@172.16.134.160's password: video.mp4 100% 66MB 33.1MB/s 00:02
در بالا اول محل فایل در سیستم خودمون رو تعیین کردیم (home/aliabry/share/video.mp4) و سپس اطلاعات سیستم مقصد (ali@172.16.134.160) و محل ذخیره شدن فایل در سیستم مقصد (home/ali) رو وارد کردیم .
نکته : دو نقطه بین ادرس سیستم مقصد و محل ذخیره شدن فایل در سیستم مقصد رو فراموش نکنین .
در بالا از سیستم خودمون به سیستم رموت یک فایل رو انتقال دادیم . در دستور زیر یک فایل رو از رموت به سیستم خودمون منتقل می کنیم :
aliabry@lp:~$ scp ali@172.16.134.160:/home/ali/share/1.jpg /home/aliabry/ ali@172.16.134.160's password: 1.jpg 100% 37KB 36.5KB/s 00:02
اپشن های دستور scp
1-
: دستور scp رو اجبار می کند تا از پرتکل شماره 1 ssh استفاده کند.
2-
: دستور scp رو اجبار میکند تا از پرتکل شماره 2 ssh استفاده کند.
4-
: برای تعیین این که فقط از ipv4 استفاده کند.
6-
: برای تعیین این که فقط از ipv6 استفاده کند.
C-
: برای فعال سازی فشرده سازی . (در ارتباط های با سرعت پایین تاثیر مثبت داره ولی اگر سرعت ارتباط تون بالا باشه باعث لود cpu میشه )
B-
: برای فعال کردن batch mode که دیگه پسورد و passphrases رو نپرسه.
نکته : این اپشن برای مواقعی که از پسورد برای ورود به سیستم مقابل استفاده می کنیم کاربردی نداره و اگر استفاده کنیم با ارور زیر مواجه میشیم :
aliabry@lp:~$ scp -B /home/aliali/Videos/share/1.jpg ali@172.16.134.160:/home/ali Host key verification failed. lost connection
l-
: برای ایجاد محدودیت سرعت در کپی کردن فایل ( KB/S , کیلوبیت بر ثانیه )
در زیر محدودیت سرعت 256 کیلوبیت رو فعال میکنیم به همراه فشرده سازی .
aliabry@lp:~$ scp -C -l 256 /home/aliabry/share/video2.mp4 ali@172.16.134.160:/home/ali ali@172.16.134.160's password: video2.mp4 1% 1456KB 33.9KB/s 38:23 ETA
p-
:برای تعیین پورت . اگر ssh سرور مقصد از پورتی به غیر از 22 استفاده می کند با این اپشن میتونین شماره پورت مورد نظرتون رو تعیین کنین .
P-
: برای نگاه داشتن اطلاعات فایل مثل: زمان ساخت , زمان دست رسی و مد های فایل (اجازه نامه های فایل) . وقتی یک فایل رو به سیستم مقصد انتقال میدین اطلاعات فایل مثل زمان ساخته شدن فایل بر اساس ساعت سیستم مقصد ثبت میشه ولی اگر از این اپشن استفاده کنین بر اساس اطلاعات اولیه فایل در سیستم مبدا ثبت میشود .
v-
: برای دریافت اطلاعات بیشتر ( verbose ) در مورد اتفاق هایی که در حال رخ دادن هست .
نکته : تا 3 تا v میتونین استفاده کنین . در زیر یک v استفاده شده.
aliabry@lp:~$ scp -v -C /home/aliabry/share/video.mp4 ali@172.16.134.160:/home/ali Executing: program /usr/bin/ssh host 172.16.134.160, user ali, command scp -v -t -- /home/ali OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 Mar 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 172.16.134.160 [172.16.134.160] port 22. debug1: Connection established. debug1: identity file /home/aliabry/.ssh/id_rsa type -1 debug1: identity file /home/aliabry/.ssh/id_rsa-cert type -1 debug1: identity file /home/aliabry/.ssh/id_dsa type -1 debug1: identity file /home/aliabry/.ssh/id_dsa-cert type -1 debug1: identity file /home/aliabry/.ssh/id_ecdsa type -1 debug1: identity file /home/aliabry/.ssh/id_ecdsa-cert type -1 debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1 debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.1 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-md5 zlib@openssh.com debug1: kex: client->server aes128-ctr hmac-md5 zlib@openssh.com debug1: sending SSH2_MSG_KEX_ECDH_INIT debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: ECDSA 9d:9a:19:5b:16:f0:54:0a:5b:a9:d1:06:63:2c:c8:fe debug1: Host '172.16.134.160' is known and matches the ECDSA host key. debug1: Found key in /home/aliabry/.ssh/known_hosts:3 debug1: ssh_ecdsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,password debug1: Next authentication method: publickey debug1: Trying private key: /home/aliabry/.ssh/id_rsa debug1: Trying private key: /home/aliabry/.ssh/id_dsa debug1: Trying private key: /home/aliabry/.ssh/id_ecdsa debug1: Next authentication method: password ali@172.16.134.160's password: debug1: Enabling compression at level 6. debug1: Authentication succeeded (password). Authenticated to 172.16.134.160 ([172.16.134.160]:22). debug1: channel 0: new [client-session] debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: Sending environment. debug1: Sending env LANG = en_US.UTF-8 debug1: Sending command: scp -v -t -- /home/ali Sending file modes: C0777 69496466 video.mp4 Sink: C0777 69496466 video.mp4 video.mp4 100% 66MB 11.1MB/s 00:06 debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: free: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Transferred: sent 69553576, received 11272 bytes, in 6.1 seconds Bytes per second: sent 11321831.1, received 1834.8 debug1: Exit status 0 debug1: compress outgoing: raw data 69533794, compressed 69486468, factor 1.00 debug1: compress incoming: raw data 5558, compressed 2678, factor 0.48
q-
: برای فعال کردن مد سکوت (اطلاعات انتقال و اخطار ها رو نشون نمیده )
r-
: برای کپی کردن دایرکتوری . مثل دستور cp که برای کپی کردن دایرکتوری از اپشن r-
استفاده میکنیم در دستور scp هم برای این کار از این اپشن استفاده می کنیم.
aliabry@lp:~$ scp -r /home/aliabry/share ali@172.16.134.160:/home/ali ali@172.16.134.160's password: 4.jpg 100% 125KB 124.8KB/s 00:00 video2.mp4 100% 78MB 25.9MB/s 00:03 2.jpg 100% 110KB 110.0KB/s 00:00 15.jpg 100% 164KB 164.0KB/s 00:00 1.jpg 100% 37KB 36.5KB/s 00:00 video.mp4 100% 66MB 33.1MB/s 00:02 1.gif 100% 692KB 692.1KB/s 00:00 5.jpg 100% 68KB 67.9KB/s 00:00 17.jpg 100% 98KB 98.1KB/s 00:00 3.jpg 100% 74KB 73.5KB/s 00:00
کپی کردن وتغییر اسم آن
برای این کار در قسمت محل ذخیره شدن فایل اسم جدید فایل رو هم اضافه کنید:
در دستور زیر اسم جدید new-name.jpg رو تعیین کردیم:
aliabry@lp:~$ scp -r ali@172.16.134.160:/home/ali/share/1.jpg /home/aliabry/new-name.jpg ali@172.16.134.160's password: 1.jpg 100% 37KB 36.5KB/s 00:00 aliabry@lp:~$ ls new-name.jpg share
کپی کرن به صورت local
از دستور scp مثل دستور cp برای انجام کپی های local هم میتونین استفاده کنین . ( یعنی فایل تو سیستم خودتون کپی کنین نه به صورت رموت)
aliabry@lp:~$ scp share/1.jpg /tmp/test/ aliabry@lp:~$ ls /tmp/test/ 1.jpg