Trochę wody w Wiśle upłynęło odkąd ostatnio używałem SSHFS, więc kiedy przyszło mi podmontować udział z serwera przez ten protokół nie obyło się bez problemów.
Instalacja
O ile wcześniej tego nie zrobiliśmy to SSHFS trzeba zainstalować:
aptitude install sshfs
Montowanie:
sshfs mdurys@10.0.0.2:/home/mdurys/projekt /home/joe/Projekty/projekt
Moja nazwa użytkownika na zdalnej maszynie jest inna niż na lokalnej, więc musiałem ją podać w ścieżce.
Tu może pojawić się pierwszy problem:
failed to open /dev/fuse: Permission denied
Rozwiązanie jest proste:
usermod -aG fuse joe
Następnie trzeba się przelogować, lub, jeśli ktoś lub starą windowsową szkołę, ponownie uruchomić komputer.
Dla pewności można sprawdzić czy użytkownik trafił do grupy fuse.
groups joe
joe : joe cdrom floppy audio dip video plugdev fuse scanner netdev bluetooth
Problem z właścicielem plików
Jeśli nazwy i identyfikatory użytkowników są różne na obu maszynach to wystąpią problemy z dostępem do plików ponieważ SSHFS w lokalnym systemie pokaże takiego właściciela jak na zdalnym systemie.
-rw-r--r-- 1 1001 1001 141 sty 9 11:13 AppCache.php
-rw-r--r-- 1 1001 1001 2395 sty 9 11:13 AppKernel.php
-rw-r--r-- 1 1001 1001 267 sty 9 11:13 autoload.php
-rwxr-xr-x 1 1001 1001 865 sty 9 11:13 console
Można temu zaradzić używając opcji idmap=user
sshfs -o idmap=user mdurys@10.0.0.2:/home/mdurys/projekt /home/joe/Projekty/projekt
Dzięki temu użytkownik dokonujący montowania zostanie zmapowany na użytkownika, na którego się łączymy.
-rw-r--r-- 1 joe 1001 141 sty 9 11:13 AppCache.php
-rw-r--r-- 1 joe 1001 2395 sty 9 11:13 AppKernel.php
-rw-r--r-- 1 joe 1001 267 sty 9 11:13 autoload.php
-rwxr-xr-x 1 joe 1001 865 sty 9 11:13 console
Problem z grupą plików
Jak widać na liście plików z poprzedniego akapitu, pliki mają poprawnego właściciela, ale grupa ciągle nie jest zmapowana. To może powodować problemy z dostępem, ale i na to jest remedium:
sshfs -o idmap=user -o uid=1000 -o gid=1000 mdurys@10.0.0.2:/home/mdurys/projekt /home/joe/Projekty/projekt
Po takim zabiegu również grupy są poprawne:
-rw-r--r-- 1 joe joe 141 sty 9 11:13 AppCache.php
-rw-r--r-- 1 joe joe 2395 sty 9 11:13 AppKernel.php
-rw-r--r-- 1 joe joe 267 sty 9 11:13 autoload.php
-rwxr-xr-x 1 joe joe 865 sty 9 11:13 console
SSHFS w /etc/fstab
Żeby nie wpisywać wszystkiego z palca z każdym razem można definicję zasobu wrzucić do /etc/fstab
. W takim wypadku trzeba podać ścieżkę do klucza, który ma zostać użyty do autoryzacji.
sshfs#mdurys@10.0.0.2:/home/mdurys/projekt /home/joe/Projekty/projekt fuse defaults,IdentityFile=/home/joe/.ssh/id_rsa,uid=1000,gid=1000 0 0
Jeśli zasób możne być niedostępny podczas uruchamiania komputera to nie warto montować go automatycznie, lepiej umożliwić montowanie go przez użytkowników na żądanie.
sshfs#mdurys@10.0.0.2:/home/mdurys/projekt /home/joe/Projekty/projekt fuse defaults,noauto,user,uid=1000,gid=1000 0 0
bash: brak dostępu
Ostatni problem, na który się nartknąłem był związany z uruchamianiem skryptów:
app/console
bash: app/console: Brak dostępu
Dzieje się tak ponieważ parametr user
w opcjach montowania implikuje noexec
, co można łatwo sprawdzić poleceniem
mount -l
Oczywiście zamiast app/console
można posługiwać się php app/console
, ale jeśli chcemy korzystać z dobrodziejstw autouzupełniania poleceń albo po prostu oszczędzać klawiaturę to należy dodać parametr exec
:
sshfs#mdurys@10.0.0.2:/home/mdurys/projekt /home/joe/Projekty/projekt fuse defaults,noauto,user,exec,uid=1000,gid=1000 0 0
Lektura dodatkowa