scp - کپی به سیستم رموت به صورت امن

دستور 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