วิธีใช้คำสั่ง scp บน Linux

เผยแพร่แล้ว: 2022-06-28
เทอร์มินัล Linux บนหน้าจอแล็ปท็อป
fatmawati achmad zaenuri/Shutterstock.com

คำสั่ง 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

วิธีตั้งค่า Remote Desktop บน Ubuntu
ที่เกี่ยวข้อง วิธีการตั้งค่าเดสก์ท็อประยะไกลบน Ubuntu

SCP นั้นค่อนข้างยาวและมีความกังวลเกี่ยวกับการใช้งานในปัจจุบัน ตั้งแต่ OpenSSH เวอร์ชัน 8.8 ถือว่า SCP ถูกเลิกใช้แล้ว การใช้งานสมัยใหม่ของ scp โดยค่าเริ่มต้นเป็นการใช้ Secure File Transfer Protocol โดยค่าเริ่มต้น SSH ยังคงใช้สำหรับการเชื่อมต่อที่ปลอดภัย แต่การถ่ายโอนไฟล์จะได้รับการจัดการโดย SFTP ทั้งหมดนี้เป็นสิ่งที่มองไม่เห็นและเกิดขึ้นอย่างน่าอัศจรรย์ภายใต้ประทุน และไวยากรณ์ของ scp ยังคงเหมือนเดิม

ควรใช้โปรแกรม rsync มากกว่า scp แต่คุณอาจพบคอมพิวเตอร์ที่ไม่ได้ติดตั้ง rsync ไว้ และคุณไม่มีสิทธิ์ในการรูท หมายความว่าคุณจะไม่สามารถทำการติดตั้งต่อไปได้ สำหรับการคัดลอกไฟล์จากคอมพิวเตอร์ไปยังคอมพิวเตอร์บนเครือข่ายภายใน scp นั้นใช้ได้อย่างสมบูรณ์ เพื่อให้ scp ทำงานได้ คุณต้องให้ SSH ทำงานบนคอมพิวเตอร์ทุกเครื่องที่คุณจะคัดลอกไปและกลับ

หากต้องการดูเวอร์ชันของ OpenSSH ที่ติดตั้งบนคอมพิวเตอร์ของคุณ ให้พิมพ์:

 ssh -V 

รับเวอร์ชันของ OpenSSH

การคัดลอกไฟล์เดียว

เช่นเดียวกับคำสั่ง 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 จาก Linux Shell
ที่เกี่ยวข้อง วิธีการสร้างและติดตั้งคีย์ SSH จาก Linux Shell

การตั้งค่าคีย์ SSH เพื่อให้คุณสามารถใช้การพิสูจน์ตัวตนแต่การเข้าถึงแบบไม่ใช้รหัสผ่านเป็นวิธีที่ต้องการมากที่สุด การใช้รหัสผ่านจะยุ่งเหยิงอย่างรวดเร็ว และ—เนื่องจากคุณได้รับพร้อมท์ให้ใส่รหัสผ่านสำหรับบัญชีผู้ใช้แต่ละบัญชี—จะป้องกันไม่ให้คุณดำเนินการตามกระบวนการโดยอัตโนมัติด้วยสคริปต์

เราตั้งค่าคีย์ SSH สำหรับบัญชีผู้ใช้ที่เราใช้บนเซิร์ฟเวอร์ระยะไกลแต่ละเครื่อง สิ่งนี้ทำให้การเข้าถึง SSH ที่ราบรื่นไปยังเซิร์ฟเวอร์อื่นสำหรับผู้ใช้สองคนนั้น ซึ่งช่วยให้เราสามารถโอนไฟล์ได้ทั้งสองทิศทาง โดยใช้บัญชีผู้ใช้ทั้งสองนี้

ในการคัดลอกไฟล์จากบัญชีผู้ใช้ "davem" บนคอมพิวเตอร์ Manjaro ไปยังบัญชี "dave" บนคอมพิวเตอร์ Fedora ผ่านคำสั่ง scp ที่ออกจากคอมพิวเตอร์ Ubuntu ในพื้นที่ของเรา ไวยากรณ์คือ:

 scp [email protected]:/home/ davem /man [email protected]:/home/dave/ 

การคัดลอกไฟล์จากเซิร์ฟเวอร์ระยะไกลเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง

เรากลับไปที่บรรทัดคำสั่งอย่างเงียบ ๆ ไม่มีสัญญาณว่าเกิดอะไรขึ้น ทำงานบนสมมติฐานว่าไม่มีข่าวใดเป็นข่าวดี scp จะรายงานเฉพาะข้อผิดพลาดสำหรับรีโมตนี้ไปยังการคัดลอกจากระยะไกล ในการตรวจสอบคอมพิวเตอร์ Fedora เราจะเห็นว่ามีการคัดลอกและรับไฟล์จากคอมพิวเตอร์ Manjaro แล้ว

ไฟล์จากคอมพิวเตอร์ Manjaro ได้รับบนคอมพิวเตอร์ Fedora

ตามค่าเริ่มต้น ไฟล์จะถูกคัดลอกโดยตรงจากคอมพิวเตอร์ต้นทางไปยังคอมพิวเตอร์เป้าหมาย คุณสามารถแทนที่ได้โดยใช้ตัวเลือก -3 (สามทาง)

ด้วยตัวเลือกนี้ ไฟล์จะถูกโอนจากเป้าหมายไปยังต้นทาง ผ่านเครื่องคอมพิวเตอร์ของคุณ เพื่อให้เกิดขึ้นได้ จำเป็นต้องมีการเข้าถึง SSH จากคอมพิวเตอร์ในพื้นที่ของคุณไปยังคอมพิวเตอร์เป้าหมาย

 scp -3 [email protected]:/home/ davem /man [email protected]:/home/dave/ 

การคัดลอกไฟล์จากเซิร์ฟเวอร์ระยะไกลเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ผ่านเครื่องคอมพิวเตอร์

ยังไม่มีวี่แววว่ามีอะไรเกิดขึ้น แม้ว่าจะทำการแชนเนลไฟล์ผ่านเครื่องคอมพิวเตอร์ของคุณก็ตาม หลักฐานของพุดดิ้งคือการตรวจสอบคอมพิวเตอร์เป้าหมาย

ตัวเลือกอื่น

-p (รักษาแอตทริบิวต์ของไฟล์) จะเก็บการสร้างไฟล์ดั้งเดิม ความเป็นเจ้าของ และแฟล็กการเข้าถึงไฟล์ที่ถ่ายโอน โดยจะมีข้อมูลเมตาเดียวกันกับไฟล์ต้นฉบับในคอมพิวเตอร์ต้นทาง

หากคุณเห็นข้อความแสดงข้อผิดพลาด ให้ลองทำซ้ำคำสั่งและใช้แฟล็ก -v (verbose) เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับความพยายามในการถ่ายโอน คุณควรจะสามารถระบุจุดของความล้มเหลวในผลลัพธ์ได้

ตัวเลือก -C (บีบอัด) จะบีบอัดไฟล์ในขณะที่คัดลอกและขยายขนาดเมื่อได้รับ นี่คือสิ่งที่ย้อนกลับไปในยุคของการสื่อสารโมเด็มช้าระหว่างคอมพิวเตอร์ การลดขนาดของเพย์โหลดสามารถลดเวลาในการส่งได้

ทุกวันนี้ เวลาที่ใช้ในการบีบอัดและขยายขนาดไฟล์มักจะใช้เวลานานกว่าความแตกต่างระหว่างการส่งข้อมูลแบบบีบอัดและไม่บีบอัด แต่เนื่องจาก scp เหมาะที่สุดในการคัดลอกไฟล์ระหว่างคอมพิวเตอร์บน LAN เดียวกัน ความเร็วในการส่งจึงไม่น่ากังวลมากนัก

ที่เกี่ยวข้อง: วิธีสำรองข้อมูลระบบ Linux ของคุณด้วยrsync