โปรโตคอล SSH สร้างอุโมงค์ที่ปลอดภัยซึ่งคุณสามารถถ่ายโอนสตรีมแบบสองทิศทางและคุณสามารถใช้สตรีมนั้นเพื่อเชื่อมต่อสองกระบวนการที่คุณต้องการ
สองกระบวนการที่คุ้นเคยที่สุดคือเชลล์ (ที่เซิร์ฟเวอร์) และตัวจำลองเทอร์มินัลแบบโต้ตอบ (ที่ไคลเอ็นต์) นั่นคือสิ่งที่คุณกำลังใช้เมื่อคุณ ssh ไปยังเซิร์ฟเวอร์และพิมพ์คำสั่งที่พรอมต์ของเชลล์ระยะไกล
SCPเป็นการถ่ายโอนไฟล์ทำได้โดยใช้เชลล์และคำสั่งรีโมตเท่านั้น ใน SCP เมื่อไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์และการรับรองความถูกต้องและการอนุญาตเสร็จเรียบร้อยแล้วไคลเอ็นต์จะส่งคำสั่งเชลล์ระยะไกลเช่นscp -f myfile.txt
ซึ่งเพิ่งเขียนเนื้อหาของไฟล์ myfile.txt ไปยังสตรีม (สำหรับลูกค้า เพื่ออ่าน) หรือscp -t myfile.txt
ที่อ่านจากสตรีมและเขียนไปยัง myfile.txt
คุณจะสังเกตเห็นว่า -f และ -t (สำหรับ "จาก" และ "ถึง") ไม่ได้อยู่ใน managed ของ scp พวกเขาถือว่าเป็นภายใน มีรูปแบบการรับรู้ที่มีน้ำหนักเบาและรูปแบบสำหรับการถ่ายโอนไดเรกทอรีโดยการห่อเนื้อหาของไฟล์ในส่วนหัวที่เรียบง่าย แต่ส่วนใหญ่แล้ว SCP เป็นเรื่องพื้นฐานของการเขียนไบต์ของไฟล์ลงในอุโมงค์ SSH ทำให้ SSH จัดการกับสิ่งที่ซับซ้อนเช่นการบีบอัดและความสมบูรณ์
SFTPเป็นโปรโตคอลการถ่ายโอนไฟล์ที่มีความซับซ้อนมากขึ้นซึ่งจะถูกส่งผ่าน SSH อีกครั้ง
ใน SFTP ทั้งคำขอและการตอบกลับเป็นแพ็กเก็ตที่เข้ารหัสด้วยเลขฐานสองที่มีชื่อเช่น "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE"
คุณสมบัติที่น่าสนใจอย่างหนึ่งของโปรโตคอลคือคำสั่งสามารถไพพ์ไลน์และการตอบสนองอาจมาในลำดับใดก็ได้ นี่อาจหมายความว่าเซสชันใช้เวลาในการรอการตอบรับน้อยลงและมีโอกาสเพิ่มประสิทธิภาพการถ่ายโอนพร้อมกันจากเซิร์ฟเวอร์เครื่องเดียวที่มีแหล่งข้อมูลด้วยความเร็วที่หลากหลายแม้ว่าฉันไม่รู้ว่าโอกาสเหล่านั้นถูกนำไปใช้เท่าไร
SFTP มีคำสั่งให้ทำหลายสิ่งที่ SCP ไม่ได้พูด เช่นลบเปลี่ยนชื่อตัดทอนย้าย ฯลฯ
รายละเอียดทั้งหมดที่มีอยู่ในร่าง IETF
เป็นที่น่าสังเกตว่าแพคเกจ SSH ที่ใหม่กว่าจะแทนที่scp
ไบนารีผู้ใช้ด้วย symlink เป็นไบนารี SFTP SFTP นี้มีรูปลักษณ์และความรู้สึกของ scp แต่ภายใต้ฝาครอบมันใช้โปรโตคอล SFTP
การอ้างอิง - O'Reilly SSH: The Secure Shell, The Definitive Guide , ส่วน 5.7 "ระบบย่อย":
คำเตือน: อย่าลบบรรทัดระบบย่อย -sftp ออกจาก sshd2_config: จำเป็นสำหรับ scp2 และ sftp เพื่อให้ทำงานได้ ภายในโปรแกรมทั้งสองเรียกใช้ ssh2 -s sftp เพื่อทำการถ่ายโอนไฟล์
ปลาเป็นประวัติศาสตร์ที่น่าสนใจ สมมติว่าคุณต้องการถ่ายโอนไฟล์ผ่าน SSH แต่ระบบระยะไกลของคุณไม่มี SCP หรือบางทีคุณอาจต้องการใช้ไฟล์ที่ซับซ้อนกว่า SCP แต่ระบบรีโมตของคุณไม่มี SFTP สถานการณ์เหล่านี้ไม่น่าจะเกิดขึ้นในปัจจุบัน แต่เมื่อปลาถูกประดิษฐ์ขึ้น
ดังนั้นผู้พัฒนาMidnight Commanderของลูกค้าจึงตั้งค่าเกี่ยวกับการสร้างโซลูชันของตนเอง มันคล้ายกับ scp ในหลักการ แต่มีคำสั่งมากกว่านี้ ไคลเอนต์ส่งคำสั่งที่มีลักษณะดังนี้:
#RETR /some/name
ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'
หากคุณกำลังพูดคุยกับเซิร์ฟเวอร์เซิร์ฟเวอร์มันจะตีความ#RETR
คำสั่ง อย่างไรก็ตามหากเซิร์ฟเวอร์ระยะไกลไม่ได้ติดตั้งเซิร์ฟเวอร์ Fish คำสั่งจะถูกตีความโดยเชลล์ ความคิดเห็นแรกจากนั้นคำสั่งที่พิมพ์ข้อมูลเกี่ยวกับไฟล์ตามด้วยเนื้อหาไฟล์ที่ล้อมรอบในเครื่องหมายบางอย่าง
อย่างมีประสิทธิภาพในกรณีที่ไม่มี scp หรือปลาลูกค้ามี "scp เทียบเท่า" ของตัวเอง - แต่มันสามารถส่งคำสั่งเชลล์เพื่อเปลี่ยนชื่อย้ายตัดทอน ฯลฯ ได้อย่างเท่าเทียมกัน
รายละเอียดของปลาในแหล่งบัญชาการเที่ยงคืนที่นี่
ทั้งหมดนี้หมายความว่าอย่างไรจากมุมมองของผู้ใช้ปลายทาง
- การใช้งานเซิร์ฟเวอร์ SSH รุ่นเก่ารองรับ scp แต่ไม่ใช่ SFTP คุณไม่สามารถใช้ไคลเอ็นต์ SFTP กับสิ่งเหล่านี้
- ใช้ SFTP เพื่อประสิทธิภาพความน่าเชื่อถือและความยืดหยุ่น
- ลูกค้า "scp" ของคุณอาจเป็นไคลเอนต์ SFTP ที่ปิดบัง ( จำเป็นต้องมีการอ้างอิง )
- ปลาอาจมีประโยชน์ในสถานการณ์เฉพาะ แต่ใช้ SFTP มาตรฐานมากขึ้น