3 คะแนน โดย GN⁺ 2023-09-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • SSHFS ช่วยให้สามารถเมานต์ระบบไฟล์ระยะไกลผ่าน SFTP ได้ และเนื่องจากเซิร์ฟเวอร์ SSH ส่วนใหญ่รองรับและเปิดใช้การเข้าถึง SFTP เป็นค่าเริ่มต้น จึงสามารถใช้งานได้โดยไม่ต้องตั้งค่าฝั่งเซิร์ฟเวอร์เพิ่มเติม
  • ฟอร์กสำหรับการบำรุงรักษา deadbeefsociety/sshfs ถูกเก็บถาวรแล้ว เนื่องจาก SSHFS ไม่ได้อยู่ในสภาพถูกปล่อยทิ้งอีกต่อไป และเวอร์ชันที่ควรใช้งานคือ libfuse/sshfs
  • SSHFS ถูกรวมอยู่ในดิสทริบิวชัน Linux หลัก ๆ และมีประวัติการใช้งานจริงในโปรดักชันบนหลายระบบมาเป็นเวลานาน แต่ปัจจุบันไม่มีผู้มีส่วนร่วมที่ทำงานอย่างสม่ำเสมอ และปัญหาที่ทราบอยู่มีอยู่ใน bugtracker
  • ผู้ดูแลในปัจจุบันยังคงรวม pull request และออกรีลีสเป็นระยะ แต่ไม่มีทรัพยากรสำหรับการพัฒนาเพิ่มเติมนอกเหนือจากการจัดการ ปัญหาที่มีผลกระทบสูง และรายงานบั๊กที่ไม่มี pull request หรือปัญหาที่ไม่ร้ายแรงอาจไม่ได้รับการตอบกลับ
  • รูปแบบการใช้งานพื้นฐานคือ sshfs [user@]hostname:[directory] mountpoint และแนะนำให้รันในฐานะผู้ใช้ทั่วไป โดย mountpoint ต้องเป็นของผู้ใช้นั้น
    • หากไม่ระบุชื่อผู้ใช้ จะใช้ชื่อผู้ใช้ในเครื่อง
    • หากไม่ระบุไดเรกทอรี จะเมานต์โฮมไดเรกทอรีฝั่งรีโมต
    • หากต้องใช้รหัสผ่าน ssh ที่ sshfs เรียกใช้งานจะเป็นผู้ขอรหัสผ่าน
  • สามารถระบุตัวเลือกของ ssh ได้หลายแบบ รวมถึง -oport=PORT และการยกเลิกเมานต์บน Linux ใช้ fusermount -u mountpoint ส่วนบน BSD และ macOS ใช้ umount mountpoint
  • การบิลด์ต้องใช้ libfuse 3.1.0 ขึ้นไป หรืออินเทอร์เฟซที่เข้ากันได้กับ libfuse3, Glib ที่มี development headers, Meson 0.38 ขึ้นไป และ Ninja ส่วนการรันการทดสอบต้องใช้ Python module py.test

1 ความคิดเห็น

 
GN⁺ 2023-09-06
ความคิดเห็นจาก Hacker News
  • ถ้าต้องการให้ทำงานใน userspace และใช้ Emacs ได้ ก็มี TRAMP “Transparent Remote (file) Access, Multiple Protocol”: https://www.gnu.org/software/tramp/
    ผมใช้บ่อยเวลาเข้าถึงไฟล์บนเซิร์ฟเวอร์จาก MacBook Pro

    • สิ่งที่ดีที่สุดของ TRAMP คือหลังจาก cd เข้าไปยังไดเรกทอรีบนระบบรีโมตแล้ว สามารถ cp ไฟล์จากไดเรกทอรีทำงานปัจจุบันไปยังเครื่องโลคัลหรือรีโมตอื่นได้ และในทางกลับกันก็สามารถคัดลอกจากโลคัลไปยังไดเรกทอรีทำงานรีโมตปัจจุบันได้ด้วย
      ก่อนใช้ TRAMP ต้อง SSH เข้ารีโมต, ใช้ cd กับ ls หาตำแหน่งที่จะคัดลอก, ตัด SSH session แล้วค่อยใช้ scp หรือ rsync ย้ายไฟล์ และส่วนใหญ่ต้อง SSH กลับเข้าไปอีก
    • สำหรับข้อมูลเพิ่มเติม ฟีเจอร์จำนวนมากของ Emacs หรืออาจจะส่วนใหญ่หรือทั้งหมด ทำงานกับ Tramp ได้อย่างโปร่งใส รวมถึง dired, eshell, magit ด้วย
  • น่าสนใจนะ ผมนึกมาตลอดว่า sshfs เป็นส่วนหนึ่งของ OpenSSH แต่ก็ได้เรียนรู้อะไรใหม่ทุกวัน
    sshfs ที่ใช้ใน Slackware ก็ดูเหมือนถูกปล่อยทิ้งไว้เหมือนกัน: https://github.com/libfuse/sshfs
    ดูจากข้อความที่อ้างในลิงก์แล้ว ก็สงสัยว่าโปรเจกต์นี้จะกลายเป็น “ผู้สืบทอด” รายต่อไปหรือไม่

    If you would like to take over this project, you are welcome to do so. Please fork it and develop the fork for a while. Once there has been 6 months of reasonable activity, please contact Nikolaus@rath.org and I'll be happy to give you ownership of this repository or replace with a pointer to the fork.
    ก็สงสัยเหมือนกันว่าอาจถูกปล่อยทิ้งเพราะ การปรับโครงสร้าง RHEL เหมือนที่เกิดกับ Bluetooth หรือเปล่า

    • ดูเหมาะมากที่ผู้ดูแล OpenSSH จะรับไปดูแล ผมเองก็เคยคิดว่านี่เป็น โครงสร้างพื้นฐาน SSH หลักของ Linux
  • สำหรับข้อมูลเพิ่มเติม บน Mac ผมใช้ macFUSE + sshfs มาหลายปี แต่ตอนนี้ติดตั้งแค่เครื่องมือ Mountain Duck ที่ยอดเยี่ยมแล้วใช้แทน สามารถเข้าถึง SFTP endpoint ผ่าน Finder และ mount point ได้
    เป็นซอฟต์แวร์ที่ดีมาก และสำหรับผมคือของจำเป็น

    • ช่วงหลังผมกลับมาเป็นลูกค้า rsync.net อีกครั้ง และระหว่างไล่อ่านเอกสารก็แปลกใจนิดหน่อยที่ตัวเลือกแนะนำสำหรับการเชื่อมกับ Mac ยังเป็น Fuse/sshfs อยู่: https://www.rsync.net/resources/howto/mac_sshfs.html
      ไม่กี่เดือนก่อนผมลอง ExpanDrive/StrongSync เพราะเรื่องนี้ และเพิ่งได้ยินชื่อ Mountain Duck ครั้งแรกตอนนี้ ผมชอบ Cyberduck อยู่แล้ว กำลังจะลองใช้ดู ถ้ามันทำงานได้ดีอยู่แล้ว ก็อยากให้ช่วยอัปเดตหน้านั้นเพื่อคนอื่น ๆ ด้วย นอกนั้นผมก็เป็นลูกค้าที่พอใจ
    • บันทึกไว้เป็นข้อมูล ตอนนี้บน macOS มี https://www.fuse-t.org/ แล้ว ทำงานได้โดยไม่ต้องใช้ kernel extension โดยรัน NFS server แบบโลคัลไว้เบื้องหลัง แล้วให้ macOS เชื่อมต่อเข้าไป
      implementation ของ sshfs ก็มีอยู่ที่ https://github.com/macos-fuse-t/fuse-t/wiki#sample-filesyste...
    • ผมเองก็ใช้ Mountain Duck เป็นหลักเหมือนกัน แต่ใน VSCode ส่วนขยาย Remote SSH ของ Microsoft ช่วยได้มากในการทำงานกับ repository บน VM หรือเครื่องรีโมตอื่น
      Libfuse/SSHFS บน macOS ใช้ค่อนข้างลำบากมาตั้งแต่หลายปีก่อน ผมเลยย้ายมาใช้ Mountain Duck เช่นกัน
  • เสียดายที่ sshfs ไม่ได้รับการดูแลต่อแล้ว สมัยเรียนผมเคยใช้ sshfs เพื่อแก้โค้ดด้วย Vim plugin จำนวนมากของตัวเอง โดยไม่ต้องติดตั้งปลั๊กอิน Vim ทั้งหมดบนเซิร์ฟเวอร์คำนวณระยะไกลของโรงเรียน
    แปลกใจที่ระบบทำงานได้ลื่นไหลกว่าที่คิดมาก

  • ผมคิดว่า SFTP เป็นโปรโตคอลที่ดีแต่ถูกประเมินค่าต่ำไป บางกรณีการ mirror แบบสองทิศทางสมเหตุสมผลกว่าการ replicate file tree จากฝั่งหนึ่งไปอีกฝั่งหนึ่ง
    หลังจาก fork โค้ด SSHFS แล้วลองดู ผมก็รวบรวมเอกสารที่เกี่ยวข้องและความคิดส่วนตัวไว้ที่ https://hackmd.io/@q/sftp-over-ws และคอยดูแลต่อ

    • SFTP ดีขึ้นกว่า FTP มาก แต่ฝั่งเซิร์ฟเวอร์ยังมีศักยภาพอีกเยอะที่ยังไม่ถูกทำให้เป็นจริง ดังนั้นแค่ทำ client ให้ดีขึ้นก็ยังแก้ไม่ได้
      ทั้งเซิร์ฟเวอร์ OpenSSH และ GNU lsh ต่างก็ให้บริการ protocol version เก่าเท่านั้น น่าจะเป็น v2 ความเก่านี้เป็นการเลือกโดยตั้งใจ: https://marc.info/?l=openssh-unix-dev&m=168488976013498&w=2
  • ชุดเทคโนโลยีต่างกันนิดหน่อย แต่ช่วงหนึ่งผมใช้ NFS บน WireGuard ได้ค่อนข้างพอใจมาก

    • เมื่อ TCP channel ถูกรีเซ็ต NFS จัดการ reconnect ได้สง่างามกว่า ซึ่งเป็นข้อดีใหญ่
      ฟีเจอร์ของ filesystem ก็ implement ไว้มากกว่า ทำให้รายงาน df สะท้อนการใช้งาน filesystem ระยะไกลได้ถูกต้อง
      นอกจากนี้ NFSv4 ยังมี “delegations” ที่ให้สิทธิ์ควบคุมไฟล์แบบสมบูรณ์แก่ client ในรูปของ lease ที่หมดอายุได้ client NFS รุ่นใหม่ยังมี “polite delegations” ที่ต่ออายุ lease โดยนัยด้วย
      SSHFS สะดวกมากสำหรับการ mount แบบ “เร็วและพอใช้” ด้วยการตั้งค่าน้อยที่สุด
    • ผมไปทางตรงกันข้าม โครงสร้างพื้นฐาน VPN เสถียรมาก แต่เปลี่ยนมาใช้ แนวทางแบบ storage
      หลังจาก sync ไฟล์ด้วยยูทิลิตี storage DVFS ที่เรียบง่ายมากแล้วก็ไม่หันกลับไปอีก ผมชอบมีสำเนาหลายชุดกระจายอยู่หลายที่
    • หลายปีก่อนผมเปลี่ยนจาก sshfs มาเป็น NFSv4 + WireGuard และมันทำงานได้ดีมาก
  • ตอนนี้เวลาต้องใช้ฟังก์ชันแบบ sshfs ส่วนใหญ่จะใช้ rclone mount ประสิทธิภาพ ความเสถียร และตัวเลือกแคชดีกว่า

    • แต่ rclone ไม่สามารถเขียนลงกลางไฟล์ได้โดยไม่ส่งไฟล์ทั้งไฟล์ นั่นแหละคือปัญหาใหญ่ที่สุด
      sshfs ก็อาจมีข้อจำกัดแบบเดียวกันได้
  • น่าเสียดาย แต่ฟอร์กนี้ดูไม่ค่อยแอ็กทีฟเท่าไร คอมมิตล่าสุดคือเดือนมีนาคม และกิจกรรมใน PR กับ issue ก็แทบไม่มี
    คงไม่ฝากความหวังไว้กับตัวนี้

    • ถ้าเป็นโปรเจกต์ที่เสถียร ควรคาดหวังกิจกรรมมากแค่ไหนกัน?
    • ตามนิยามแบบจาวาสคริปต์ “แอ็กทีฟ” คือการไปยุ่งกับของที่ทำงานได้ดีอยู่แล้วจนพัง
  • Nautilus หรือ file explorer ของ Ubuntu รองรับ การเมานต์โฟลเดอร์ SFTP ดูเหมือนภายในจะใช้ gvfs
    เพราะ SFTP ใช้การเชื่อมต่อ SSH สำหรับถ่ายโอนไฟล์ เลยไม่เห็นความต่างด้าน UI เมื่อเทียบกับ SSHFS

    • ใน GUI ของ Nautilus สามารถเข้าไปดู SFTP endpoint ได้ก็จริง แต่จะสร้าง จุดเมานต์ ของ filesystem ที่ใช้จากเทอร์มินัลได้พร้อมกันด้วยไหม?
      จำไม่ค่อยได้แล้ว
  • มีใครเคยใช้ rclone หรือ sshfs ร่วมกับ macFUSE/osxfuse บน Mac OS X ไหม?

    • ผมใช้ Macfuse ต่อเซิร์ฟเวอร์ทั้งหมดให้เหมือนเป็นโฟลเดอร์ในเครื่องอยู่ ใช้งานได้ดี
      แต่ละเซิร์ฟเวอร์มีสคริปต์เล็ก ๆ ของตัวเอง เช่น mount_fooserver.sh:
      umount -f ~/mounts/fooserver
      sshfs -o kill_on_unmount,reconnect,allow_other,defer_permissions,direct_io username@server:/ ~/mounts/fooserver -ovolname=foo
    • บน M1 ใช้ macFUSE กับ sshfs เมานต์ไดรฟ์ของเครื่อง Linux ที่ออฟฟิศ โดยรวมก็โอเค แต่ก็มีอาการฝืด ๆ เฉพาะตัวอยู่บ้าง
      ขั้นตอนตั้งค่าค่อนข้างเหมือนการผจญภัย และมีอยู่หลายครั้งที่สงสัยว่าทำถูกไหม แต่พอทำต่อไปก็ใช้งานได้ดี
    • ดูคอมเมนต์ระดับบนสุดของผมด้านบนได้ คำตอบคือ “Mountain Duck”
    • บน Monterey, M1 นั้น sshfs ใช้งานได้ แต่ค่อนข้างช้า