บทช่วยสอนง่ายๆ ที่จะช่วยคุณถ่ายโอนไฟล์ไปยังระบบระยะไกลจากระบบ Linux ของคุณโดยใช้คำสั่ง scp
SCP ย่อมาจาก 'Secure Copy' scp
เป็นยูทิลิตี้บรรทัดคำสั่งที่นำเสนอโดย Linux ซึ่งช่วยให้สามารถถ่ายโอนไฟล์และไดเรกทอรีจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งผ่านเครือข่ายที่ไม่ปลอดภัย
หากคุณต้องการคัดลอกไฟล์จากระบบหนึ่งไปยังอีกระบบหนึ่ง ก็scp
เป็นตัวเลือกที่ดีในการถ่ายโอนไฟล์และไดเร็กทอรีอย่างปลอดภัย เมื่อเครื่องสื่อสารทั้งสองเครื่องเชื่อมต่อกันบนเครือข่ายเดียวกัน การใช้งานscp
จึงเป็นไปได้
คุณสามารถพึ่งพาscp
คำสั่งในการรักษาความลับและความสมบูรณ์ได้อย่างมาก เนื่องจากไฟล์ที่กำลังถ่ายโอนและรหัสผ่านที่ใช้สำหรับการถ่ายโอนนั้นถูกเข้ารหัส จะไม่มีการเปิดเผยข้อมูลที่ละเอียดอ่อนแม้ว่าจะมีใครพยายามสอดแนมการจราจรในขณะที่การถ่ายโอนนี้ดำเนินอยู่
ในบทช่วยสอนนี้ เราจะเห็นตัวอย่างต่างๆ ของscp
คำสั่ง เราจะดูตัวเลือกที่ใช้บ่อยด้วยscp
คำสั่งด้วย
เริ่มต้นใช้งานคำสั่ง scp
การใช้scp
คำสั่งคุณสามารถถ่ายโอนไฟล์/ไดเร็กทอรี:
- จากเครื่องท้องถิ่นของคุณไปยังเครื่องระยะไกล
- ระหว่างเครื่องระยะไกลสองเครื่อง
- จากเครื่องระยะไกลไปยังเครื่องในพื้นที่ของคุณ
ไวยากรณ์ทั่วไป:
scp [Option] [source_file_name] [[email protected]_Host]:destination_folder
ให้เราเข้าใจคุณลักษณะพื้นฐานของคำสั่งนี้ทีละรายการ
- [source_file_name]นี่คือไฟล์ต้นฉบับที่คุณต้องการคัดลอก
- [ [ป้องกันอีเมล] _Host]นี่คือชื่อผู้ใช้ของระบบระยะไกลที่คุณต้องการคัดลอกไฟล์ ที่อยู่ IP ของเครื่องระยะไกลยังใช้ในแอตทริบิวต์นี้หลังจาก
@
สัญลักษณ์ ' '
- [destination_folder]นี่คือไดเร็กทอรีที่คุณต้องการบันทึกไฟล์ที่คัดลอก
หมายเหตุ:สัญลักษณ์ทวิภาค ( :
) ใช้ในไวยากรณ์เนื่องจากแยกความแตกต่างระหว่างตำแหน่งโลคัลและตำแหน่งระยะไกล เราใช้โคลอน ( :
) กับระบบรีโมตเพื่อระบุไดเร็กทอรีที่จะคัดลอกไฟล์ ในกรณีที่เราไม่ได้ระบุไดเร็กทอรีเป้าหมาย ไฟล์จะถูกคัดลอกไปยังโฮมไดเร็กทอรีของผู้ใช้ระบบระยะไกล
ตัวเลือกที่ใช้กับ scp
ตัวเลือกยอดนิยมบางตัวที่ใช้กับscp
คำสั่งแสดงอยู่ด้านล่าง
ตัวเลือก |
คำอธิบาย |
-C |
อนุญาตให้ถ่ายโอนไฟล์บีบอัด |
-v |
ให้ผลลัพธ์ที่ละเอียด |
-r |
คัดลอกไฟล์และไดเร็กทอรีซ้ำๆ |
-p |
รักษาสิทธิ์ โหมด และเวลาในการเข้าถึงไฟล์ |
-P |
เปลี่ยนพอร์ตเริ่มต้นที่ใช้โดยscp คำสั่ง |
ตัวเลือกที่ใช้บ่อยด้วยคำสั่ง scp
เราจะดูตัวอย่างของตัวเลือกเหล่านี้เพิ่มเติมในบทช่วยสอน
กำลังคัดลอกไฟล์จากโลคัลไปยังระบบรีโมต
scp
อนุญาตให้คุณถ่ายโอนไฟล์จากระบบโลคัลของคุณไปยังระบบรีโมตโดยใช้ไวยากรณ์ต่อไปนี้ สิ่งนี้ทำให้คุณสามารถถ่ายโอนหรืออัพโหลดไฟล์ของคุณไปยังเซิร์ฟเวอร์ที่อยู่ห่างไกล
ไวยากรณ์ทั่วไป:
scp [file_name] [email protected]:[destination_folder]
ตัวอย่าง:
scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
ในตัวอย่างนี้ เรากำลังคัดลอกไฟล์ 'apache-tomcat-9.0.8.tar.gz' จากระบบโลคัลไปยังระบบระยะไกลซึ่งมีที่อยู่ IP '143.110.178.221'
บนระบบระยะไกล ไฟล์จะถูกคัดลอกไปยังไดเร็กทอรีชื่อ 'gaurav'
เอาท์พุท:
[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password:
apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB/s 02:00
[email protected]:~$
ให้เราตรวจสอบเอาต์พุตบนระบบรีโมตสำหรับไฟล์
[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#
ดังนั้น ไฟล์จึงถูกคัดลอกไปยังระบบรีโมตได้สำเร็จโดยใช้scp
คำสั่ง
การคัดลอกไฟล์หลายไฟล์ไปยังระบบรีโมต
ในตัวอย่างก่อนหน้านี้ เราเรียนรู้ที่จะถ่ายโอนไฟล์ไปยังระบบระยะไกลโดยใช้scp
คำสั่ง ตอนนี้เราจะเห็นวิธีการโอนไฟล์หลายไฟล์จากระบบภายในของคุณไปยังระบบระยะไกลโดยใช้คำสั่งนี้
ไวยากรณ์ทั่วไป:
scp [file 1] [file 2] [file n] [email protected]_host:[specific directory]
ให้เราเข้าใจกระบวนการง่ายๆ นี้ด้วยตัวอย่าง
ตัวอย่าง:
scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
ในที่นี้ มีการกล่าวถึงไฟล์หลายไฟล์ในคำสั่งที่จะคัดลอกบนระบบรีโมต
เอาท์พุท:
[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
[email protected]'s password:
ath.html 100% 199KB 94.7KB/s 00:02
abc.txt 100% 0 0.0KB/s 00:00
ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42.2KB/s 00:00
[email protected]:~$
บนระบบระยะไกล:
[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root 204057 Oct 5 08:58 ath.html
-rw-r--r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#
ไฟล์ทั้งสามจะถูกคัดลอกบนระบบรีโมต
การคัดลอกไดเร็กทอรีไปยังระบบรีโมต
คุณสามารถใช้scp
คำสั่งเพื่อคัดลอกไดเร็กทอรีจากระบบโลคัลของคุณไปยังระบบรีโมต กระบวนการนี้คล้ายกับการคัดลอกไฟล์ ในการคัดลอกเนื้อหาของไดเร็กทอรีด้วย คุณสามารถใช้ -r
ตัวเลือกด้วยscp
คำสั่ง
-r
ตัวเลือกที่จะใช้ในการคัดลอกไดเรกทอรีซ้ำ นั่นหมายความว่า โฟลเดอร์ย่อยและไฟล์ทั้งหมดภายในไดเร็กทอรีจะถูกคัดลอกด้วย
ไวยากรณ์ทั่วไป:
scp -r [directory path] [email protected]_host:[target_directory]
ตัวอย่าง:
scp -r PycharmProjects [email protected]:gaurav
เอาท์พุท:
[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password:
__main__.py 100% 623 7.8KB/s 00:00
__init__.py 100% 23 0.4KB/s 00:00
completion.py 100% 2929 28.1KB/s 00:00
search.py 100% 4728 38.7KB/s 00:00
uninstall.py 100% 2963 32.5KB/s 00:00
hash.py 100% 1681 21.3KB/s 00:00
check.py 100% 1430 16.8KB/s 00:00
configuration.py 100% 7125 50.4KB/s 00:00
show.py 100% 6289 49.8KB/s 00:00
download.py 100% 6623 48.2KB/s 00:00
[email protected]:~$
การใช้-r
ตัวเลือกร่วมกับscp
คำสั่งจะคัดลอกโฟลเดอร์ย่อยและไฟล์ทั้งหมดภายในไดเร็กทอรีจากเครื่องโลคัลไปยังระบบรีโมต
กำลังแสดงข้อมูลโดยละเอียดเกี่ยวกับกระบวนการ scp
คุณสามารถใช้อ็อพชัน-v
(ตัวพิมพ์เล็กv
) เพื่อแสดงข้อมูลเกี่ยวกับไฟล์ที่ถูกคัดลอกบนรีโมตหรือระบบโลคัลของคุณ เอาต์พุตประเภทนี้เรียกอีกอย่างว่าเอาต์พุตแบบละเอียด
เมื่อใช้ตัวเลือกนี้ ข้อมูลการดีบักที่สมบูรณ์เกี่ยวกับไฟล์จะแสดงขึ้นบนหน้าจอ
ไวยากรณ์ทั่วไป:
scp -v [file_name] [email protected]_host:
ตัวอย่าง:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
เอาท์พุท:
[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/gaurav/.ssh/id_rsa type -1
apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36
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 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$
ที่นี่ ในผลลัพธ์ คุณจะเห็นว่าข้อมูลการดีบักของไฟล์กำลังแสดงอยู่บนเทอร์มินัลของคุณ เมื่อใช้scp
คำสั่งกับ-v
ตัวเลือก
การถ่ายโอนไฟล์ระหว่างสองรีโมตโฮสต์
Linux ให้คุณเชื่อมต่อกับโฮสต์ระยะไกลหลายตัว คุณสามารถถ่ายโอนไฟล์และไดเร็กทอรีระหว่างสองรีโมตโฮสต์โดยใช้scp
คำสั่ง
ไวยากรณ์ทั่วไป:
scp [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]
The syntax may seem a bit wider but is pretty simple. Here, the the first part of the command gives the input about the remote user from where the file is to be copied. colon (:) and /
is used to specify the file name or the directory name which is to be transferred between the two remote machines.
The second part gives information about the target remote system where the file is to be copied.
Example:
scp -r [email protected]:gaurav [email protected]:/team
Here, we will be copying a directory named ‘gaurav’ recursively from the local system to a remote system. The file will be copied to a folder ‘team’ on the remote system.
Output:
[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team
[email protected]'s password:
1.py 100% 134 261.3KB/s 00:00
variables.py 100% 377 949.2KB/s 00:00
abc.txt 100% 0 0.0KB/s 00:00
ath.html 100% 199KB 41.8MB/s 00:00
[email protected]:~$
Here, we used the scp
command on the local system to transfer a directory named ‘gaurav’ from one remote server to another.
Transfer files from the remote system to your local system
คุณสามารถถ่ายโอนไฟล์หรือไดเร็กทอรีจากระบบรีโมตไปยังระบบโลคัลของคุณได้อย่างง่ายดายโดยใช้scp
คำสั่ง พูดง่ายๆ ก็คือ คุณสามารถดาวน์โหลดไฟล์หรือไดเร็กทอรีหลายไฟล์จากเซิร์ฟเวอร์ระยะไกลไปยังระบบภายในของคุณได้โดยใช้scp
คำสั่ง
ไวยากรณ์ทั่วไป:
scp [email protected]_host:/files/file.txt /[folder_of_local_system]
เอาท์พุท:
[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password:
how.txt 100% 11 0.1KB/s 00:00
[email protected]:~$
ที่นี่ฉันได้ดาวน์โหลด (คัดลอก) ไฟล์จากเซิร์ฟเวอร์ระยะไกลไปยังโฮมไดเร็กตอรี่ของฉันแล้ว ดังนั้นฉันจึงใช้ dot ( .
) เพื่อระบุในคำสั่งเพื่อคัดลอกไฟล์ไปยังโฮมไดเร็กตอรี่ของฉัน
ตัวอย่างผลลัพธ์:
[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt
[email protected]:~$
ที่นี่ ไฟล์ถูกคัดลอกไปยังโฮมไดเร็กตอรี่ของฉันจากเซิร์ฟเวอร์ระยะไกลแล้ว
ในทำนองเดียวกัน คุณสามารถดาวน์โหลดไฟล์หรือไดเร็กทอรีหลายไฟล์จากเซิร์ฟเวอร์ระยะไกลโดยใช้scp
คำสั่งพร้อมตัวเลือกที่เหมาะสม
บีบอัดไฟล์เพื่อให้โอนเร็วขึ้น
บางครั้งการถ่ายโอนไฟล์ขนาดใหญ่อาจใช้เวลานาน ปัญหานี้สามารถแก้ไขได้ในขณะที่ใช้scp
คำสั่งด้วย-C
ตัวC
เลือก(ตัวพิมพ์ใหญ่)
ใช้-C
ตัวเลือกนี้บีบอัดไฟล์ขนาดใหญ่ขึ้นซึ่งอำนวยความสะดวกในการถ่ายโอนที่เร็วขึ้นและประหยัดเวลา
ข้อเท็จจริงที่น่าสนใจประการหนึ่งเกี่ยวกับตัวเลือกนี้คือ ไฟล์ถูกคัดลอกด้วยขนาดดั้งเดิมบนระบบปลายทาง แต่ในระหว่างขั้นตอนการถ่ายโอน ขนาดจะถูกบีบอัดเพื่อให้สามารถถ่ายโอนได้เร็วขึ้น ดังนั้นการบีบอัดจะทำได้เฉพาะบนเครือข่ายเท่านั้น
ไวยากรณ์ทั่วไป:
scp -C [file_name] [email protected]_host:[target_folder]
ให้เราดูตัวอย่างเปรียบเทียบเพื่อทำความเข้าใจความแตกต่าง
โอนโดยไม่มีตัวเลือก -C:
[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
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 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$
จากด้านบน ผลลัพธ์ เราจะเห็นว่าเวลาที่จำเป็นสำหรับการถ่ายโอนคือ 74.6 วินาที เราจะลองถ่ายโอนไฟล์เดียวกันโดยใช้ตัวเลือก -C และสังเกตความแตกต่าง
โอนด้วยตัวเลือก -C:
[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img 100% 1834KB 98.7KB/s 00:18
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img 100% 1834KB 100.3KB/s 00:18
Sink: E
Sending file modes: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218.5KB/s 00:16
Sink: E
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 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$
ในที่นี้ เราสังเกตได้ง่ายๆ ว่าการใช้-C
ตัวเลือกพร้อมscp
คำสั่งช่วยให้เราบีบอัดไฟล์ผ่านเครือข่ายได้ ซึ่งพิสูจน์ได้ว่าเป็นตัวเลือกที่ช่วยประหยัดเวลา
การใช้พอร์ต ssh อื่นสำหรับการถ่ายโอนไฟล์
ขณะใช้scp
คำสั่ง พอร์ตเริ่มต้นที่ปรับใช้คือport 22
. ผู้ใช้มีอิสระในการปรับแต่งตัวเลือกพอร์ตนี้ คุณสามารถใช้-P
(ตัวเลือกตัว P ตัวพิมพ์ใหญ่) กับscp
คำสั่งเพื่อใช้พอร์ตที่คุณเลือก
ไวยากรณ์ทั่วไป:
cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]
ตัวอย่าง:
scp -P 4248 dlink [email protected]:team
การใช้คำสั่งข้างต้น ไฟล์จะถูกโอนไปยังเซิร์ฟเวอร์ระยะไกล แต่คราวนี้พอร์ตที่ใช้จะเป็นport 4248
ค่าเริ่มต้นport 22
แทน
บทสรุป
หลังจากผ่านบทช่วยสอนนี้ เราได้เรียนรู้เกี่ยวกับลักษณะไดนามิกของscp
คำสั่งที่ใช้ในการถ่ายโอนหรือคัดลอกไฟล์จากระบบหนึ่งไปยังอีกระบบหนึ่ง ตัวเลือกนี้ยังสามารถใช้เพื่อดาวน์โหลดไฟล์หรือไดเร็กทอรีจากเซิร์ฟเวอร์ระยะไกล ดังนั้น เราสามารถสรุปได้ว่าscp
คำสั่งนั้นมีประโยชน์มากสำหรับการถ่ายโอนไฟล์ เมื่อคุณต้องจัดการระบบมากกว่าหนึ่งระบบรวมถึงเซิร์ฟเวอร์ระยะไกลพร้อมกัน