วิธีใช้คำสั่ง scp บน Linux
เผยแพร่แล้ว: 2022-06-28
คำสั่ง scp
ทำให้การคัดลอกไฟล์ระหว่างคอมพิวเตอร์ Linux ทำได้ง่ายดายและปลอดภัย ใช้การรักษาความปลอดภัย SSH แต่ที่ดีที่สุดคือความเรียบง่าย หากคุณสามารถใช้ cp
ได้ คุณสามารถใช้ scp
ได้
Secure Copy Protocol และ scp
มานิยามคำศัพท์กัน: มี SCP และมี scp
SCP ตัวพิมพ์ใหญ่ย่อมาจาก Secure Copy Protocol scp
ตัวพิมพ์เล็กย่อมาจาก secure cp
กล่าวอีกนัยหนึ่ง SCP เป็นโปรโตคอลและ scp
เป็นโปรแกรม
scp
ได้รับการออกแบบมาให้เป็นวิธีที่ปลอดภัยในการคัดลอกไฟล์ระหว่างคอมพิวเตอร์ Linux ระยะไกล ใช้ SSH เพื่อสร้างการเชื่อมต่อที่ปลอดภัย SSH หรือ Secure Shell เป็นโปรโตคอลเครือข่ายเข้ารหัสที่มักใช้ในการเข้าถึงและเข้าสู่ระบบคอมพิวเตอร์ Linux ระยะไกล บนลีนุกซ์รุ่น, ฟังก์ชัน SSH มีให้โดย OpenSSH
SCP นั้นค่อนข้างยาวและมีความกังวลเกี่ยวกับการใช้งานในปัจจุบัน ตั้งแต่ OpenSSH เวอร์ชัน 8.8 ถือว่า SCP ถูกเลิกใช้แล้ว การใช้งานสมัยใหม่ของ scp
โดยค่าเริ่มต้นเป็นการใช้ Secure File Transfer Protocol โดยค่าเริ่มต้น SSH ยังคงใช้สำหรับการเชื่อมต่อที่ปลอดภัย แต่การถ่ายโอนไฟล์จะได้รับการจัดการโดย SFTP ทั้งหมดนี้เป็นสิ่งที่มองไม่เห็นและเกิดขึ้นอย่างน่าอัศจรรย์ภายใต้ประทุน และไวยากรณ์ของ scp
ยังคงเหมือนเดิม
ควรใช้โปรแกรม rsync
มากกว่า scp
แต่คุณอาจพบคอมพิวเตอร์ที่ไม่ได้ติดตั้ง rsync
ไว้ และคุณไม่มีสิทธิ์ในการรูท หมายความว่าคุณจะไม่สามารถทำการติดตั้งต่อไปได้ สำหรับการคัดลอกไฟล์จากคอมพิวเตอร์ไปยังคอมพิวเตอร์บนเครือข่ายภายใน scp
นั้นใช้ได้อย่างสมบูรณ์ เพื่อให้ scp
ทำงานได้ คุณต้องให้ SSH ทำงานบนคอมพิวเตอร์ทุกเครื่องที่คุณจะคัดลอกไปและกลับ
หากต้องการดูเวอร์ชันของ OpenSSH ที่ติดตั้งบนคอมพิวเตอร์ของคุณ ให้พิมพ์:
ssh -V
การคัดลอกไฟล์เดียว
เช่นเดียวกับคำสั่ง cp
มาตรฐาน scp
จะคัดลอกไฟล์จากตำแหน่ง ต้นทาง ไปยังตำแหน่ง เป้าหมาย ในการคัดลอกไฟล์ไปยังคอมพิวเตอร์ระยะไกล คุณต้องทราบที่อยู่ IP หรือชื่อเครือข่ายของคอมพิวเตอร์ระยะไกล คุณต้องมีข้อมูลประจำตัวสำหรับบัญชีผู้ใช้ที่มีสิทธิ์ในการเขียนสำหรับตำแหน่งที่คุณส่งไฟล์ไป
ในการส่งไฟล์ชื่อ “sample.txt” ไปยังคอมพิวเตอร์ชื่อ “fedora-34” บนเครือข่ายท้องถิ่น ไวยากรณ์คือ:
scp ./sample.txt [email protected]:/home/dave/Downloads/
คำสั่งประกอบด้วย:
- scp : คำสั่ง scp
- ./sample.txt : ไฟล์ที่เราจะส่ง อยู่ในไดเร็กทอรีปัจจุบัน
- dave@ : บัญชีผู้ใช้บนคอมพิวเตอร์ระยะไกลที่เราจะส่งไฟล์ไปให้
- fedora-34.local : ชื่อเครือข่ายของคอมพิวเตอร์ระยะไกล
- :/home/dave/Downloads/ : ตำแหน่งที่จะคัดลอกไฟล์ไปยังคอมพิวเตอร์ระยะไกล สังเกตเครื่องหมายทวิภาค “:” ที่แยกชื่อคอมพิวเตอร์และเส้นทาง
คุณจะได้รับแจ้งให้ป้อนรหัสผ่านสำหรับบัญชีบนคอมพิวเตอร์ระยะไกล จากนั้นไฟล์จะถูกคัดลอก
ถ้าคุณต้องการให้ไฟล์มีชื่ออื่นบนคอมพิวเตอร์ระยะไกล คุณสามารถเพิ่มชื่อไฟล์ในพาธเป้าหมายได้ ในการคัดลอกไฟล์เดียวกันและตั้งชื่อว่า “different-file.txt” ให้ใช้ไวยากรณ์นี้:
scp ./sample.txt [email protected]:/home/dave/Downloads/different-file.txt
คำสั่ง scp
จะเขียนทับไฟล์ที่มีอยู่อย่างเงียบๆ ดังนั้นโปรดใช้ความระมัดระวังเมื่อคุณคัดลอกไฟล์ หากมีไฟล์อยู่แล้วในคอมพิวเตอร์เป้าหมายที่มีชื่อเดียวกับไฟล์ที่คุณกำลังคัดลอก ไฟล์นั้นจะถูกเขียนทับและสูญหาย
หากคอมพิวเตอร์เป้าหมายไม่ได้ใช้พอร์ต SSH เริ่มต้นคือ 22 คุณสามารถใช้ตัวเลือก -P
(หมายเลขพอร์ต) เพื่อระบุหมายเลขพอร์ตที่เหมาะสม
กำลังเรียกไฟล์เดียว
ในการคัดลอกไฟล์ จาก เซิร์ฟเวอร์ระยะไกล เพียงแค่ใส่เซิร์ฟเวอร์ระยะไกลเป็นแหล่งที่มา และใส่พาธในพื้นที่ที่คุณต้องการให้ไฟล์คัดลอกเป็นเป้าหมาย เราจะคัดลอกไฟล์ชื่อ “development-plan.md” จากคอมพิวเตอร์ระยะไกลไปยังไดเร็กทอรีปัจจุบันในเครื่องคอมพิวเตอร์
scp [email protected]:/home/dave/Downloads/development-plan.md
หากคุณเพิ่มชื่อไฟล์ในพาธภายใน ไฟล์จะถูกคัดลอกและกำหนดชื่อนั้น
scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md
ไฟล์ถูกคัดลอกแต่เปลี่ยนชื่อเป็นชื่อไฟล์ที่เราระบุ
ls -hl *.md
การคัดลอกไฟล์หลายไฟล์
การคัดลอกไฟล์หลายไฟล์ในทิศทางใดทิศทางหนึ่งทำได้ง่าย คุณสามารถแสดงรายการไฟล์ต้นฉบับได้มากเท่าที่คุณต้องการ เรากำลังคัดลอกไฟล์ markdown สองไฟล์และไฟล์ CSV

scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Downloads/
ไฟล์ทั้งสามจะถูกคัดลอกไปยังคอมพิวเตอร์ระยะไกล คุณยังสามารถใช้สัญลักษณ์แทนได้ คำสั่งนี้ทำสิ่งเดียวกับคำสั่งสุดท้าย
scp ./dp . [email protected]:/home/dave/Downloads/
การคัดลอกไดเรกทอรีซ้ำๆ
ตัวเลือก -r
(เรียกซ้ำ) ให้คุณคัดลอกแผนผังไดเร็กทอรีทั้งหมดด้วยคำสั่งเดียว เราได้วางไฟล์สองไฟล์ไว้ในไดเร็กทอรีชื่อ "data" และสร้างไดเร็กทอรีชื่อ "CSV" ภายในไดเร็กทอรี "data" เราวางไฟล์ CSV ไว้ในไดเร็กทอรี "data/CSV"
คำสั่งนี้คัดลอกไฟล์และสร้างโครงสร้างไดเร็กทอรีบนคอมพิวเตอร์ระยะไกลขึ้นใหม่
scp -r ./data [email protected]:/home/dave/Downloads/
การคัดลอกไฟล์ระหว่างเซิร์ฟเวอร์ระยะไกล
คุณยังสามารถสั่งให้ scp
คัดลอกไฟล์จากเซิร์ฟเวอร์ระยะไกลเครื่องหนึ่งไปยังอีกเครื่องหนึ่งได้ ไวยากรณ์ค่อนข้างง่าย คุณระบุชื่อบัญชีและที่อยู่เครือข่ายของเซิร์ฟเวอร์ต้นทางและชื่อบัญชีและที่อยู่เครือข่ายของเซิร์ฟเวอร์เป้าหมาย ไฟล์ถูกคัดลอกจากเซิร์ฟเวอร์ต้นทางและคัดลอกไปยังตำแหน่งบนเซิร์ฟเวอร์เป้าหมาย
แม้ว่าไวยากรณ์จะเรียบง่าย แต่การทำให้มั่นใจว่าทุกอย่างอยู่ในสถานที่นั้นต้องใช้ความคิดอีกเล็กน้อย เห็นได้ชัดว่าตำแหน่งที่คุณพยายามคัดลอกไฟล์ไปยังเซิร์ฟเวอร์ระยะไกลต้องสามารถเข้าถึงได้โดยบัญชีผู้ใช้ที่คุณระบุในบรรทัดคำสั่ง และบัญชีผู้ใช้นั้นต้องมีสิทธิ์เขียนในตำแหน่งนั้น
ข้อกำหนดเบื้องต้นที่ละเอียดกว่านั้นคือต้องตั้งค่าการเข้าถึง SSH ระหว่างเครื่องคอมพิวเตอร์ของคุณกับคอมพิวเตอร์ต้นทาง และระหว่างเซิร์ฟเวอร์ต้นทางและเซิร์ฟเวอร์เป้าหมายด้วย ตรวจสอบให้แน่ใจว่าคุณสามารถใช้ SSH เพื่อล็อกอินเข้าสู่เซิร์ฟเวอร์เป้าหมาย จากเซิร์ฟเวอร์ต้นทาง หากคุณไม่สามารถทำได้ scp
จะไม่สามารถเชื่อมต่อได้
การตั้งค่าคีย์ SSH เพื่อให้คุณสามารถใช้การพิสูจน์ตัวตนแต่การเข้าถึงแบบไม่ใช้รหัสผ่านเป็นวิธีที่ต้องการมากที่สุด การใช้รหัสผ่านจะยุ่งเหยิงอย่างรวดเร็ว และ—เนื่องจากคุณได้รับพร้อมท์ให้ใส่รหัสผ่านสำหรับบัญชีผู้ใช้แต่ละบัญชี—จะป้องกันไม่ให้คุณดำเนินการตามกระบวนการโดยอัตโนมัติด้วยสคริปต์
เราตั้งค่าคีย์ SSH สำหรับบัญชีผู้ใช้ที่เราใช้บนเซิร์ฟเวอร์ระยะไกลแต่ละเครื่อง สิ่งนี้ทำให้การเข้าถึง SSH ที่ราบรื่นไปยังเซิร์ฟเวอร์อื่นสำหรับผู้ใช้สองคนนั้น ซึ่งช่วยให้เราสามารถโอนไฟล์ได้ทั้งสองทิศทาง โดยใช้บัญชีผู้ใช้ทั้งสองนี้
ในการคัดลอกไฟล์จากบัญชีผู้ใช้ "davem" บนคอมพิวเตอร์ Manjaro ไปยังบัญชี "dave" บนคอมพิวเตอร์ Fedora ผ่านคำสั่ง scp
ที่ออกจากคอมพิวเตอร์ Ubuntu ในพื้นที่ของเรา ไวยากรณ์คือ:
scp [email protected]:/home/ davem /man [email protected]:/home/dave/
เรากลับไปที่บรรทัดคำสั่งอย่างเงียบ ๆ ไม่มีสัญญาณว่าเกิดอะไรขึ้น ทำงานบนสมมติฐานว่าไม่มีข่าวใดเป็นข่าวดี scp
จะรายงานเฉพาะข้อผิดพลาดสำหรับรีโมตนี้ไปยังการคัดลอกจากระยะไกล ในการตรวจสอบคอมพิวเตอร์ Fedora เราจะเห็นว่ามีการคัดลอกและรับไฟล์จากคอมพิวเตอร์ Manjaro แล้ว
ตามค่าเริ่มต้น ไฟล์จะถูกคัดลอกโดยตรงจากคอมพิวเตอร์ต้นทางไปยังคอมพิวเตอร์เป้าหมาย คุณสามารถแทนที่ได้โดยใช้ตัวเลือก -3
(สามทาง)
ด้วยตัวเลือกนี้ ไฟล์จะถูกโอนจากเป้าหมายไปยังต้นทาง ผ่านเครื่องคอมพิวเตอร์ของคุณ เพื่อให้เกิดขึ้นได้ จำเป็นต้องมีการเข้าถึง SSH จากคอมพิวเตอร์ในพื้นที่ของคุณไปยังคอมพิวเตอร์เป้าหมาย
scp -3 [email protected]:/home/ davem /man [email protected]:/home/dave/
ยังไม่มีวี่แววว่ามีอะไรเกิดขึ้น แม้ว่าจะทำการแชนเนลไฟล์ผ่านเครื่องคอมพิวเตอร์ของคุณก็ตาม หลักฐานของพุดดิ้งคือการตรวจสอบคอมพิวเตอร์เป้าหมาย
ตัวเลือกอื่น
-p
(รักษาแอตทริบิวต์ของไฟล์) จะเก็บการสร้างไฟล์ดั้งเดิม ความเป็นเจ้าของ และแฟล็กการเข้าถึงไฟล์ที่ถ่ายโอน โดยจะมีข้อมูลเมตาเดียวกันกับไฟล์ต้นฉบับในคอมพิวเตอร์ต้นทาง
หากคุณเห็นข้อความแสดงข้อผิดพลาด ให้ลองทำซ้ำคำสั่งและใช้แฟล็ก -v
(verbose) เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับความพยายามในการถ่ายโอน คุณควรจะสามารถระบุจุดของความล้มเหลวในผลลัพธ์ได้
ตัวเลือก -C
(บีบอัด) จะบีบอัดไฟล์ในขณะที่คัดลอกและขยายขนาดเมื่อได้รับ นี่คือสิ่งที่ย้อนกลับไปในยุคของการสื่อสารโมเด็มช้าระหว่างคอมพิวเตอร์ การลดขนาดของเพย์โหลดสามารถลดเวลาในการส่งได้
ทุกวันนี้ เวลาที่ใช้ในการบีบอัดและขยายขนาดไฟล์มักจะใช้เวลานานกว่าความแตกต่างระหว่างการส่งข้อมูลแบบบีบอัดและไม่บีบอัด แต่เนื่องจาก scp
เหมาะที่สุดในการคัดลอกไฟล์ระหว่างคอมพิวเตอร์บน LAN เดียวกัน ความเร็วในการส่งจึงไม่น่ากังวลมากนัก
ที่เกี่ยวข้อง: วิธีสำรองข้อมูลระบบ Linux ของคุณด้วยrsync