sshfs - ke vzdáleným souborům šifrovaně a interaktivně

Občas je potřeba pracovat se soubory, které jsou na jiném počítači, řešeními jsou nfs, samba, webdav, ..., tj. varianty, které nemusí být vždy dostupné, a sshfs.

5.4.2006 06:00 | MaReK Olšavský | přečteno 15180×

Poměrně nedávno jsem řešil, jak připojit soubory z notebooku k mému stolnímu počítači. Nabízela se řešení: Samba, WebDav, NFS, ale vše vyžadovalo na notebooku instalaci dalšího software a jeho konfiguraci. Řešení (když chci z jiného počítače něco nastavit, případně překopírovat nějaký soubor), které by bylo nejlepší, by bylo takové, jenž by využilo to, co mám již nainstalováno na notebooku a tím je běžící sshd. Toto řešení se jmenuje sshfs (ssh file system) a "objevil" jsem jej díky zprávičce z 21.11.2005 na Linuxsoft.cz od o.k. Uplatnění tohoto programu nenajdete jen u případu podobného mému, ale i pokud máte ssh přístup na server a nemůžete na něm instalovat jiný, výše zmíněný, systém pro přístup k souborům. Já si přes sshfs připojuji notebook, kde mám běžící LAMP, na lokálním počítači edituji soubory, které jsou na něm uložené a nemusím řešit synchronizaci kódů a dokumentů mezi několika počítači, na kterých průběžně pracuji.

Sshfs se opírá o fuse* (filesystem in userspace), což je utilitka/modul, který umožňuje i neprivilegovaným uživatelům vytvářet a používat, bez psaní jakéhokoliv kódu do jádra, virtuální systém souborů připojený do toho svého. Modul byl přidán i do jádra 2.6.14, čiže by měl být brzo součástí všech aktuálních linuxových distribucí. Mezi jinými je tento modul používán v projektu GmailFS, který umožňuje připojit Gmail jako další souborový systém (nebo disk, chcete-li).

Pokud chcete sshfs používat, musíte mít ssh přístup na vzdálený počítač, ke kterému se chcete takto připojovat a budete moci pracovat pouze se soubory, ke kterým máte patřičná oprávnění na vzdáleném stroji.

Nainstalování a používání sshfs.

Fuse je zatím potřeba v některých distribucích instalovat ručně ze zdrojových kódů, pro některé (u mě Ubuntu 5.10 a dnes již i Mandriva) jsou již balíčky připravené, stejně je tomu u celého sshfs. Instalaci začneme logicky u fuse.

Po stažení a rozbalení potřebného souboru (nejméně verze 2.2) lze přistoupit k jeho překladu a instalaci. K překladu budete potřebovat vývojářskou verzi glib 2.0 či novější. Kompilace fuse probíhá standardně trojkombinací ./configure && make && make install. Po tomto kroku by bylo teoreticky možné začít kompilovat sshfs, to by se Vám pravděpodobně i dobře zkompilovalo, ale nefungovalo. Fuse se nainstaluje do adresáře /user/local/lib, je třeba ověřit existenci této cesty v /etc/ld.so.conf a případně jako root tuto cestu přidat. V dalším kroku doporučuji spustit ldconfig. Pokud jste kompilovali modul ze zdrojových kódů, budete muset ještě "ručně" vytvořit patřičný speciální znakový soubor a to příkazem:

mknod -m 666 /dev/fuse c 10 229

a přípojný bod, kam budete externí systém souborů připojovat (v mém případě jsem zvolil logicky /mnt/fuse). Poté již můžete modul zavést použitím modprobe fuse, já jsem fuse ještě přidal do /etc/modules, aby mi automaticky nabíhal při každém startu počítače, protože jej poměrně intenzivně používám.

Po instalaci fuse je možné přistoupit k instalaci sshfs. Opět je možné podstoupit instalaci ze zdrojových kódů pomocí ./configure && make && make install. Je-li pro Vaši distribuci připraven binární balík, bude tento mít pravděpodobně závislost na fuse, za standardních podmínek si vyžádá jeho instalaci (nepoužíváte-li některou z distribucí, které nehlídají závislosti) a nebudete muset procházet krok z předchozího odstavce. Pokud chcete používat sshfs i jako běžný uživatel, možná (někdy zůstane dostupný jen pro roota) budete muset přenastavit práva pro soubory sshfs a fusermount.

Souborový systém vzdáleného počítače připojíme pomocí příkazu:

sshfs [uživatel@]vzdálený_stroj:[vzdálený_adresář] lokální_přípojný_bod [volby]

(například k domácímu skladišti se připojuji pomocí sshfs marek@192.168.1.3:/ /mnt/fuse -C). Pokud za dvojtečku za názvem nebo IP adresou, nezadáte startovní adresář, ke kterému pochopitelně musíte mít oprávnění přistupovat, budete nasměrováni do domovského adresáře toho uživatele, jehož přihlašovací jméno jste použili. Pokud nezadáte jméno uživatele, bude se Vás sshfs snažit připojit pod stejným jménem, pod kterým jste přihlášeni na počítači. Volby/přepínače jsou uvedeny poněkud netradičně jako poslední. Jejich seznam získáte pomocí sshfs -h, já používám s oblibou -C pro zapnutí komprimovaného přenosu, protože většinou edituji textové soubory, pokud bych zpracovával třeba komprimované grafické formáty, touto volbou v podstatě nic nezískám a -d, když chci mít náhled, co se při komunikaci děje.

Pokud jste došli sem a dělali jste všechno stejně jako já, máte v adresáři /mnt/fuse připojený vzdálený souborový systém a můžete pracovat. Zde si neodpustím menší varování. Pokud máte udělány linky do jiných adresářů nebo na soubory umístěné na disku, budou Vám ty na vašem počítači fungovat korektně, ale ty, které máte na vzdáleném už fungovat nemusí. Zdůvodnění je prosté. Když mám jako uživatel na vzdálenému počítači udělánu v domovském adresáři zkratku html (symlink), který vede na /var/www/, tak připojím-li se nyní přes sshfs, vstoupím do domovkého adresáře a zkusím cd html, povede mi v absolutních cestách, tj. na lokálním počítači na /var/www.

Pro odpojení vzdáleného souborového systému se nepoužívá příkaz sshfs s přepínačem, ale fusermount [přepínač] lokální_připojovací_bod. Přepínače získáte pomocí fusermount -h a pro odpojení budete používat nejpravděpodobněji -u, nebo -z. Před odpojením uzavřete všechny soubory, které jste ze vzdáleného počítače měli otevřené, jinak Vám fusermount nedovolí odpojení.

K čemu sshfs je a k čemu není?

Pokud potřebujete občas překopírovat pár souborů, je vhodnějším řešením použít ftp klienta (existují i terminálové, scripty ovladatelné), jeho bezpečnou variantu ftps, případně chcete-li zautomatizovat vše do scriptů a máte vygenerovány certifikáty, lze použít scp. Nemusíte nic instalovat. Zde je sice možné použít sshfs, ale ostatní řešení jsou mnohem výhodnější.

Pokud potřebujete pracovat na vzdáleném stroji, je zapotřebí používat telnet nebo ssh. Sshfs Vám zpřístupní vzdálené soubory, ale veškeré programy/příkazy spouštíte lokálně na svém počítači. Ilustrujme situaci následovně. Pokud na vzdáleném stroji (ideálně odlišné architektury) máte uložené zdrojové kódy a bez určení architektury stroje je zkompilujete, budou spustitelné na počítači, ze kterého jste je kompilovali, nikoliv na stroji kde jsou uloženy a pokud překladači sdělíte cílovou architekturu a pokusíte se je spustit z počítače, ze kterého jste připojeni, také pohoříte (není myšleno spuštění třeba přes ssh, ale přímo na Vašem stroji, kde si jen vyberete pracovní adresář, který bude "navázán" přes sshfs na vzdálený stroj).

Dalším velice nevhodným použitím sshfs je následující způsob archivace dat ze vzdáleného stroje. Připojíte vzdálený počítač přes sshfs, spustíte tar, s paramety pro zkomprimování, pro vytvoření záloh vzdáleného stroje. Opět, uvažte především rychlost, s jakou bude celá tato operace prováděna. Archív bude vytvářen na Vašem stroji, veškerá data budou v nezkomprimované podobě (komprese ssh příliš nezefektivní) stahována na Váš počítač a teprve tam je zpracuje archivační program. Pokud neurčíte místo, bude archiv přenášen zpět na "zdrojový" stroj a posléze si jej budete moci překopírovat k sobě. Zde je opět mnohem vhodnější kombinací mít vygenerovány certifikáty, použít ssh pro odeslání příkazů pro vytvoření archívu a posléze je překopírovat pomocí rsync, nebo scp na Váš cílový stroj.

Sshfs je opravdu především nástrojem pro interaktivní práci se soubory na vzdáleném počítači ke kterému máte povolený ssh přístup.

Závěr

Sshfs nabízí něco, co může být pro spoustu uživatelů, kteří jsou mobilní mezi několika desktopy a mají ssh přístup k "serveru",  výhodou. Pracujete lokálně na svých souborech, které máte uloženy třeba doma na desktopu a máte je přístupné pěkně v souborovém systému. Já používám tento systém k přístupu k souborům na mém notebooku, který defakto funguje, jako přenosný vývojový WWW server a jsem s tímto řešením 100% spokojen.

Odkazy

http://www.cs.wm.edu/~zvezdan/research/780project/ ... Velice detailní popis toho, jak sshfs funguje.
http://fuse.sourceforge.net/ ... Domovská stránka projektu FUSE
http://fuse.sourceforge.net/sshfs.html ... Domovská stránka projektu sshfs
*/FUSE je i na tomto serveru již popisovaný emulátor Sinclair ZX-Spectrum. Dokonce autor tohoto FUSE, neznal emulátor FUSE, je autorem spectemu, který byl také popisován v článku o emulátorech Sinclaira. :-D

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=1145