January 01, 2007

sshfs 在 Embedded Linux 開發的應用

上週 [Jollen] 聊到 Embedded Linux 開發上使用 [SSH Filesystem] 取代過去 NFS mount 的方式,這有許多好處,就我的經驗來說有:
  • 檔案分享與存取全程透過 SSH 加密傳輸,安全且有效率
  • 享受 ssh port forwarding 的便利,輕易突破防火牆的約束
  • 較 NFS 更少的配置,而且更方便
  • 預留 software debug 的可能性
NFS 在權限控管上有很多安全性疑慮,更麻煩的是其識別主機的設計常常會造成困擾,特別是 subnet 配置相當複雜的中小型企業來說,往往會引來很瑣碎的處理過程。

ssh 不僅考慮到傳輸過程的加解密,其 public-key system 設計對 Embedded Linux 有很大的幫助,因為我們會希望最終 production 或者 pre-release 的產品能提供有限度的偵錯能力,但又希望避免昔日「一千零一的系統密碼」(還記得某公司出廠的 BIOS 裡面的工程密碼嗎?) 造成不當的使用,所以,在開發與 deployment 時,就給定一組 key (使用 ssh-keygen),透過 public/private key 的數學驗證基礎,取代直接存取 PAM 或系統的 telnet 或 login session。

就系統的配置來說,在 DevKit 或 target 上需要安裝 ssh server,一般我們會使用 [Dropbear SSH server] 這個輕量級的實做,在 OpenEmbedded 或 Ipkg 檔案庫都可找到預先編譯的套件,但是,需要留意的是,[SSH Filesystem] 要透過 SFTP (FTP over SSH) 進行檔案存取,而在 [Dropbear SSH server] 會呼叫外部的 sftp-server 配合運作,而該程式由 openssh-sftp-server 套件提供 ( ipkg update && ipkg install openssh-sftp-server )。當 target 端 server 相關的設定都完成後,在 host 端執行:
$ mkdir target
$ sshfs root@target:/ target
在 public key 認證完畢後,target 的檔案系統就掛進來,我們可以檢驗一下:
$ mount | grep sshfs
sshfs#root@target:/ on /tmp/target type fuse (rw,nosuid,nodev,max_read=65536)
然後我們就可一邊修改 target 的檔案系統,一邊透過 ssh 執行指令,可節省許多不必要的檔案複製或同步化時間。需要注意的是,[SSH Filesystem] 的多人讀寫機制仍可能有問題,使用上須留意。

延伸閱讀: 由 jserv 發表於 January 1, 2007 11:48 PM
迴響

如果 target 的檔案是放在 flash,常常修改會折壽。如果能反過來,在 target 放 sshfs/FUSE 來 mount host 的檔案,跟原來的 NFS mount 同樣是從 target mount host,但用 sshfs mount rootfs 似乎是不可行。不知 sshfs/FUSE 目前在 embedded Linux 的可行性如何?

jeul 發表於 November 12, 2007 05:22 PM

可透過 kboot 來使用 FUSE,類似 PS3-Linux 的途徑:
http://en.wikipedia.org/wiki/Linux_for_PlayStation_3

結論是,可行 :-)

jserv 發表於 November 12, 2007 06:05 PM

謝謝方向指點。

jeul 發表於 November 13, 2007 10:22 AM
發表迴響









記住我的資訊?