สมมติว่าคุณต้องการถ่ายโอนไฟล์บางไฟล์ระหว่างเซิร์ฟเวอร์บนระบบ Linux มีหลายวิธีที่คุณสามารถทำงานให้สำเร็จได้ แต่ถ้าลำดับความสำคัญของคุณคือการถ่ายโอนไฟล์อย่างปลอดภัย คุณจะเหลือตัวเลือกไม่กี่ทาง วิธีแก้ไขที่ง่ายที่สุดคือใช้คำสั่ง scp หรือ secure copy เพื่อถ่ายโอนไฟล์ของคุณโดยไม่ต้องกังวลเรื่องความปลอดภัย ในบทความนี้ เราจะอธิบายวิธีใช้การถ่ายโอนไฟล์อย่างปลอดภัยโดยใช้คำสั่ง scp บนระบบ Linux ของคุณ
ถ่ายโอนไฟล์ด้วยคำสั่ง scp ใน Linux (2023)
คำสั่ง scp ใน Linux คืออะไร
เมื่อพูดถึงการถ่ายโอนไฟล์ผ่านเครือข่ายที่ปลอดภัย คำสั่ง scp จะมีประโยชน์มาก มันย่อมาจาก Secure Copy Protocol และถ่ายโอนไฟล์และไดเร็กทอรีระหว่างสองระบบผ่านการเชื่อมต่อ SSH (Secure Shell) ด้วย ssh คุณสามารถมั่นใจได้ถึงความปลอดภัยของไฟล์ของคุณ เนื่องจากไฟล์เหล่านั้นถูกเข้ารหัสโดยค่าเริ่มต้น พูดง่ายๆ ก็คือ คำสั่ง scp เป็นเวอร์ชันที่ปลอดภัยกว่าของคำสั่ง cp ซึ่งคุณสามารถอ่านทั้งหมดได้ในบทความคำสั่ง Linux Terminal ของเรา
วิธีใช้คำสั่ง scp: ไวยากรณ์และตัวเลือก
ก่อนที่เราจะถ่ายโอนไฟล์ผ่าน scp ให้เราดูไวยากรณ์และตัวเลือกของคำสั่งที่นี่:
scp <ตัวเลือก> <[email protected]_ip_address:path/to/source/file><[email protected]_ip_address:target/path>
ทำความเข้าใจกับไวยากรณ์:
- อันดับแรก <[email protected]_ip_address:path/to/source/file> ระบุระบบ ‘ต้นทาง’ จากตำแหน่งที่คุณต้องการถ่ายโอนไฟล์/ ไดเร็กทอรีของคุณ
- ประการที่สอง <[email protected]_ip_address:target/path> ระบุระบบ ‘เป้าหมาย’ ที่คุณต้องการถ่ายโอนไฟล์/ไดเร็กทอรีของคุณ
หากคุณปล่อยพารามิเตอร์ด้านบนไว้อย่างใดอย่างหนึ่ง คำสั่ง scp ใน Linux จะค้นหาไฟล์ก่อนแล้วจึงคัดลอกไฟล์ในเครื่อง ตัวเลือกบางส่วนที่จะจับคู่กับคำสั่งคือ:
OptionsDestination-PSระบุพอร์ตที่จะเชื่อมต่อกับระบบโฮสต์ หากละเว้น ระบบจะใช้พอร์ต 22 ตามค่าเริ่มต้น -pคงเวลาแก้ไข เวลาเข้าถึง และโหมดจากไฟล์ต้นฉบับเมื่อคัดลอกไปยังระบบเป้าหมาย -rคัดลอกไดเร็กทอรีทั้งหมดไปยังระบบเป้าหมายซ้ำ -JU ใช้เพื่อเชื่อมต่อ ระบบต้นทางและระบบปลายทางผ่านระบบพร็อกซี (jump host)-3เมื่อใช้แฟล็กนี้ จะคัดลอกไฟล์ไปยังทั้งระบบเป้าหมายและระบบโลคัล-4บังคับให้คำสั่ง scp ใช้เฉพาะที่อยู่ IPv4-6บังคับ คำสั่ง scp เพื่อใช้เฉพาะที่อยู่ IPv6
วิธีคัดลอกไฟล์โดยใช้คำสั่ง scp
ก่อนใช้คำสั่ง scp ใน Linux มีข้อกำหนดเบื้องต้นบางอย่างที่คุณต้องปฏิบัติตามทั้งบนโฮสต์และระบบเป้าหมาย:
- ควรติดตั้ง ssh
- การเข้าถึงรูทหรือผู้ใช้ที่มีสิทธิ์ sudo
คัดลอกไฟล์จากโลคัลโฮสต์ไปยังเป้าหมายระยะไกล
หากคุณมีไฟล์ที่ต้องการถ่ายโอนจากระบบโลคัลของคุณไปยังเป้าหมายระยะไกล คุณต้องใช้ไวยากรณ์ต่อไปนี้:
scp <ตัวเลือก>
หากไวยากรณ์ข้างต้นอาจดูซับซ้อน ตัวอย่างจะทำให้ชัดเจน:
ทดสอบ scp.txt [email protected]:/home/remote2/เอกสาร/
ในตัวอย่างข้างต้น:
- test.txt เป็นชื่อของไฟล์ที่จะถ่ายโอนและอยู่ในไดเร็กทอรีปัจจุบันของระบบโลคัล
- ทดสอบคือชื่อผู้ใช้ในระบบเป้าหมาย
- 139.144.11.105 คือที่อยู่ IP ของระบบเป้าหมาย
- /home/remote2/Documents/ คือตำแหน่งบนระบบเป้าหมายที่จะบันทึกไฟล์ที่ถ่ายโอน
คัดลอกไฟล์จากโฮสต์ระยะไกลไปยังเป้าหมายในเครื่อง
หากคุณต้องการถ่ายโอนไฟล์จากรีโมตโฮสต์ไปยังเครื่องโลคัลของคุณ ให้ใช้ไวยากรณ์คำสั่ง scp ต่อไปนี้บนระบบ Linux ของคุณ:
scp <ตัวเลือก>
ตัวอย่างเช่น สมมติว่าคุณต้องการถ่ายโอนไฟล์ชื่อ test.py จากเซิร์ฟเวอร์ระยะไกลที่คุณกำลังทำงานอยู่ ให้ใช้คำสั่งนี้:
scp [email protected]:/home/test/test1.py ~/test1.py
ในตัวอย่างนี้:
- การทดสอบคือชื่อผู้ใช้โฮสต์ระยะไกล
- 10.10.11.113 คือที่อยู่ IP ของโฮสต์ระยะไกล
- /home/test/test1.py คือเส้นทางของไฟล์ที่จะถ่ายโอนจากรีโมตโฮสต์
- ~/test1.py คือชื่อของไฟล์หลังจากถ่ายโอนไปยังเครื่องโลคัลและจัดเก็บไว้ในโฮมไดเร็กทอรี
ถ่ายโอนไฟล์จากโฮสต์ระยะไกลหนึ่งไปยังเป้าหมายระยะไกลอื่น
ด้วยคำสั่ง scp คุณไม่เพียงถ่ายโอนไฟล์ระหว่างระบบโลคัลและเครื่องรีโมตเท่านั้น แต่ยังสามารถถ่ายโอนไฟล์ระหว่างระบบรีโมตสองระบบได้อีกด้วย แต่ก่อนที่คุณจะถ่ายโอนไฟล์จากระบบรีโมตหนึ่งไปยังระบบรีโมตอื่นได้ ขอแนะนำให้สร้างคีย์ ssh ส่วนตัวและคีย์ ssh สาธารณะบนระบบต้นทาง และเก็บสำเนาของคีย์สาธารณะไว้ในระบบปลายทาง
โดยทั่วไป ผู้ใช้บ่นเกี่ยวกับข้อผิดพลาด “การยืนยันคีย์โฮสต์ล้มเหลว” เมื่อถ่ายโอนไฟล์ระหว่างระบบระยะไกลสองระบบ หากต้องการข้ามข้อผิดพลาด ให้ใช้คีย์ ssh เป็นหน่วยวัดเพิ่มเติม เราได้อธิบายวิธีที่คุณสามารถทำได้ที่นี่:
1. สร้างคู่คีย์สาธารณะ/ส่วนตัวบนเซิร์ฟเวอร์ต้นทางด้วยคำสั่งนี้:
ssh-keygen -t <การเข้ารหัสอัลกอริทึม>
2. สำหรับอัลกอริทึมการเข้ารหัส คุณสามารถใช้ “rsa” ซึ่งเป็นอัลกอริทึมที่ใช้บ่อยที่สุดหรืออัลกอริทึมอื่นๆ ที่คุณเลือก
3. จากนั้น คุณจะถูกขอให้เลือกตำแหน่งที่จะจัดเก็บคีย์ ssh คุณสามารถจัดเก็บไว้ในตำแหน่งใดก็ได้ที่คุณเลือกหรือในตำแหน่งเริ่มต้น
4. สำหรับข้อความรหัสผ่าน คุณสามารถป้อนอะไรก็ได้ที่คุณต้องการหรือเว้นว่างไว้โดยกด Enter
5. จากนั้นคัดลอกพับลิกคีย์ไปยังเซิร์ฟเวอร์ปลายทางโดยใช้คำสั่งด้านล่าง ด้วยสิ่งนี้ คุณยังสามารถเข้าสู่ระบบปลายทางโดยไม่ต้องใช้รหัสผ่านโดยใช้ ssh
ssh-copy-id
หมายเหตุ: วิธีการเข้าสู่ระบบแบบไม่ใช้รหัสผ่านจะใช้ได้เฉพาะกับผู้ใช้ที่คุณสร้างคีย์ ssh ให้เท่านั้น
6. เมื่อคุณสร้างและจัดเก็บคีย์ ssh บนเซิร์ฟเวอร์ระยะไกลแล้ว ให้ใช้ไวยากรณ์คำสั่ง scp นี้เพื่อแลกเปลี่ยนไฟล์ระหว่างระบบระยะไกลสองระบบที่ใช้ Linux:
scp <ตัวเลือก>
สมมติว่าคุณต้องการถ่ายโอนไฟล์ชื่อ test.txt จากรีโมตโฮสต์หนึ่งไปยังรีโมตรีซีฟเวอร์อื่น ให้ใช้คำสั่ง:
scp [email protected]:/home/test1/test.txt [email protected]:/home/remote2/Documents/test1.txt
ในตัวอย่างนี้:
- remote1 คือชื่อของผู้ใช้ในโฮสต์ผู้ส่งระยะไกล
- 10.10.11.113 คือที่อยู่ IP ของโฮสต์ผู้ส่งระยะไกล
- /home/test1/test.txt คือพาธไปยังไฟล์ที่จะส่ง
- remote2 คือชื่อของผู้ใช้ในเป้าหมายตัวรับสัญญาณระยะไกล
- 10.11.27.111 คือที่อยู่ IP ของเป้าหมายตัวรับสัญญาณระยะไกล
- /home/remote2/Documents/test1.txt คือชื่อและพาธที่จะบันทึกสำหรับไฟล์ที่จะรับ
ถ่ายโอนหลายไฟล์โดยใช้คำสั่ง scp
การถ่ายโอนไฟล์หลายไฟล์ทีละไฟล์อาจเป็นงานที่น่าเบื่อสำหรับทุกคน คุณสามารถใช้ไวยากรณ์ด้านล่างเพื่อแลกเปลี่ยนไฟล์โดยใช้คำสั่ง scp บน Linux:
scp
ตัวอย่างเช่น – สมมติว่าคุณต้องการส่งไฟล์สี่ไฟล์ ได้แก่ test1.txt, test2.py, test3.sh และ test4.c ไปยังรีโมตรีซีฟเวอร์ คุณสามารถใช้คำสั่งด้านล่าง:
scp -P 22 test1.txt test2.py test3.sh test4.c [email protected]:/home/remote_1/เอกสาร
มาทำความเข้าใจว่าคำสั่งในตัวอย่างทำงานอย่างไรและทำงานอย่างไร:
- -p 2222 ใช้เพื่อระบุการเชื่อมต่อผ่านพอร์ต 22
- test1.txt test2.py test3.sh test4.c คือชื่อของไฟล์ที่จะถ่ายโอน
- remote_1 คือชื่อผู้ใช้ของระบบรับข้อมูล
- 10.10.11.113 คือที่อยู่ IP ของเครื่องรับ
- /home/remote_1/Documents หมายถึงพาธสำหรับจัดเก็บไฟล์ที่ได้รับ
คุณสามารถใช้สัญลักษณ์แทนเพื่อส่งไฟล์หลายไฟล์ที่มีนามสกุลเดียวกันได้ดังที่แสดงด้านล่าง:
scp <ไวด์การ์ด>.
ตัวอย่างเช่น หากคุณต้องการส่งไฟล์ .py ทั้งหมดไปยังเซิร์ฟเวอร์ระยะไกล ให้ใช้คำสั่ง scp ด้านล่างใน Linux Terminal:
scp *.py [email protected]:/home/remote_1/
ที่นี่,
- *.py หมายถึงไฟล์ python ทั้งหมด
- remote1 คือชื่อผู้ใช้ของผู้รับ
- 10.10.11.113 คือที่อยู่ IP ของผู้รับ
- /home/remote_1/ คือตำแหน่งสำหรับจัดเก็บไฟล์ที่ได้รับ
คำถามที่พบบ่อย
การถ่ายโอนไฟล์ SCP ปลอดภัยหรือไม่
Secure Copy Protocol หรือ scp เป็นโปรโตคอลที่ใช้เทคโนโลยี SSH และใช้การเข้ารหัสและการรับรองความถูกต้องสำหรับการแลกเปลี่ยนไฟล์ระหว่างสองโฮสต์ สิ่งนี้ทำให้มั่นใจในความปลอดภัยของข้อมูลที่สมบูรณ์และความสมบูรณ์ระหว่างสองโฮสต์
SCP ปลอดภัยกว่า SFTP หรือไม่
ทั้งโปรโตคอล SCP และ SFTP อยู่ในระดับเดียวกันในแง่ของความปลอดภัย ข้อได้เปรียบหลักของการใช้ scp ผ่าน SFTP คือความเร็วการถ่ายโอนที่รวดเร็ว ซึ่งมีประโยชน์อย่างยิ่งในเครือข่ายที่มีความหน่วงสูง
ถ่ายโอนไฟล์อย่างปลอดภัยโดยใช้คำสั่ง scp ใน Linux
ในบางช่วงเวลา ผู้ใช้ทุกคนจำเป็นต้องแลกเปลี่ยนไฟล์บางไฟล์ผ่านเครือข่าย คำสั่ง scp ทำให้ง่ายต่อการถ่ายโอนไฟล์อย่างปลอดภัยและมีประสิทธิภาพแม้ในเครือข่ายที่มีความหน่วงสูง แน่นอน การรู้ตัวเลือก scp และไวยากรณ์ต่างๆ ก็มีประโยชน์เช่นกัน คุณยังสามารถดูคำแนะนำของเราเกี่ยวกับวิธีเปลี่ยนชื่อไฟล์ใน Linux และวิธีลบไฟล์ใน Linux เพื่อพัฒนาทักษะการจัดการไฟล์ของคุณบนระบบปฏิบัติการให้ดียิ่งขึ้น เราหวังว่าบทความนี้จะช่วยให้คุณเรียนรู้วิธีใช้คำสั่ง scp สำหรับการถ่ายโอนไฟล์บนคอมพิวเตอร์ Linux หากคุณประสบปัญหาใด ๆ ขณะใช้คำสั่ง โปรดแจ้งให้เราทราบในส่วนความคิดเห็น