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 15178×
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.
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í.
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.
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.