SSHFS czyli cała sieć pod ręką

Dysk

Kilka słów wstępu

Wyobraźmy sobie następującą sytuację: Włączamy komputer, a  zaraz po uruchomieniu w naszym katalogu domowym mamy dostępne pliki naszej strony WWW znajduje się u naszego dostawcy hostingowego, obok znajdują się nasze pliki mp3 zgromadzone na naszym serwerze który stoi w drugim pokoju i możemy z nich korzystać jak z zasobów lokalnych (tworzyć z nich playlisty bez kopiowania), kolejny katalog to filmy znajdujące się na zewnętrznym urządzeniu podpiętym pod telewizor…. I to wszystko na naszym Linuksie. Brzmi nieźle i wydaję się być przejawem zaawansowanej wiedzy dostępnej tylko dla [i]weteranów[/i] informatycznych? To wszystko zrealizujesz za pomocą jednego programu: sshfs zainstalowanego na dowolnej platformie z rodziny Linux. Ja będę wykonywał wszystko na systemie Debian.

Czym jest SSHFS?

sshfs jest to aplikacja pisana przez autora modułu fuse czyli modułu jądra systemu wykorzystywanego do programowania logiki systemu plików. Dzięki sshfs możemy montować zdalne systemy plików nie posiadając uprawnień root’a oraz korzystać z nich prawie tak samo jak gdyby był to katalog lokalny. Jak by tego było mało, to wszystkie przesyłane siecią dane są szyfrowane tak samo jak przy użyciu ssh.

Przygotowania

Pierwsze co musimy zrobić to sprawdzenie czy nasze jądro Linuksa posiada zainstalowany już moduł fuse. Jest on dołączony do jądra od wersji 2.6.xx. wystarczy go tylko załadować. Aby sprawdzić wersję naszego jądra wydajemy polecenie

uname -a

Powinniśmy dostać wynik podobny do tego:
Linux Debian 2.6.26-2-686 #1 SMP Tue Mar 9 17:35:51 UTC 2010 i686 GNU/Linux

możemy też bezpośrednio sprawdzić czy załadowany jest moduł jądra wydając polecenie(będąc zalogowanym jako administrator):
modprobe -l
powinniśmy zobaczyć:
/lib/modules/2.6.26-2-686/kernel/fs/fuse/fuse.ko

jeżeli go nie posiadamy to wpisujemy:
sudo apt-get install fuse

następnie należy załadować moduł, wpisując:
modprobe fuse

Kolejne co musimy zrobić to zainstalować program sshfs
sudo apt-get install sshfs

Ostatnim krokiem konfiguracyjnym jest dodanie siebie do grupy fuse. Można to zrobić na dwa sposoby:
usermod -a -G fuse nazwa_uzytkownika

lub edytując plik /etc/group

Montowanie zdalnego katalogu:

Dla przykładu zamontuję pliki muzyczne znajdujące się na zdalnym serwerze w swoim katalogu domowym.
Tworzymy katalog mp3 w naszym katalogu domowym
mkdir ~/mp3
i podmontowujemy znalny katalog.
sshfs uzytkownik@serwer:/sciezka_do_muzyki ~/mp3

Czyli w moim przypadku w celu podmontowania katalogu Muzyka znajdującego się na serwerze o adresie IP 10.33.13.252 wpisuję:
sshfs kyo@s10.33.13.252:/media/dane/muzyka ~/mp3

Odmontowywanie

Aby odmontować zdalny katalog wpisujemy polecenie fusermount -u [punkt_pontowania] czyli w naszym wypadku
fusermount ~/mp3

logowanie bez hasła

Bardzo ciekawą opcją którą możemy wykorzystać jest możliwość logowania się na zdalny komputer bez podania hasła. Dzięki operacji, którą zaraz opiszę, nie tylko będziemy mogli montować katalogi bez podania hasła, ale też logować się na nasz host bez hasła za pomocą ssh.
Całość polega na tym, że na lokalnym komputerze tworzymy klucz RSA, który potem wysyłamy na serwer jako nasze „uwierzytelnienie”. Ok, tak więc do dzieła ;)
Na naszym komputerze do którego będziemy podpinać zewnętrzne katalogi wpisujemy:
ssh-keygen
W między czasie 3 razy wciskamy enter (klucz zostanie zapisany w domyślnej lokalizacji w naszym katalogu domowym)
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kyo/.ssh/id_rsa):[Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/kyo/.ssh/id_rsa.
Your public key has been saved in /home/kyo/.ssh/id_rsa.pub.
The key fingerprint is:
24:b7:fe:af:95:95:18:11:31:d5:df:96:2f:c2:35:a9 kyo@debian

Następnie należy wysłać klucz na nasz serwer (ten, którego zasoby będziemy podpinać)

kyo@debian: ssh-copy-id -i ~/.ssh/id_rsa.pub ip_serwera
Powinno nam się wyświetlić pytanie o hasło, wpisujemy takie hasło, jakie mamy na serwerze.

Jeżeli wszystko przebiegnie bez problemów to powinniśmy dostać komunikat:

Now try logging into the machine, with "ssh 'remote-host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Automatyczne montowanie

Można również zrobić tak, że zdalny zasób będzie montowany wraz ze startem systemu. Na wielu forach jest napisane, że wystarczy dodać odpowiedni wpis do /etc/fstab i już wszystko działa. Ale tak nie jest z prostego powodu. w Większości Linuksów wpisy w fstab są wykonywane wcześniej niż zostanie skonfigurowana sieć, przez co zasób nie może być poprawnie podmontowany. Rozwiązanie jest następujące, należy dodać wpis do fstaba ale nie montować go a potem jak jest już skonfigurowana sieć zamontować zasób tak jak lokalny dysk. Oto jak należy to zrobić.

Najpierw faktycznie edytujemy (będąc zalogowanym jako root) wpis w pliku /etc/fstab, dodając na końcu linię:

sshfs#użytkownik@zdalny_serwer:/tmp   /home/użytkownik/katalog_montowania/    fuse    users,noauto    0 0

na początku tej linii podajemy mówimy, że będzie dodawany zasób sshfs oraz podajemy jego adres, potem podajemy miejsce gdzie ma zostać zamontowany zasób, następnie definiujemy, że ma być użyte fuse. Kolejne dwa parametry są bardzo ważne. Pierwszy z nich(users) mówi, że użytkownicy nie będący rootem mogą montować ten zasób, a drugi znich zabrania faktycznego montowania podczas startu sytemu (noauto).

Następnie należy zdefiniować samo montowanie zasobu, ale w momencie jak jest już skonfigurowana sieć. Dobrym miejscem jest dodanie tego wpisu do pliku bashrc, który zostaje wykonany gdy poprawnie się zalogujemy do systemu(po wprowadzeniu hasła).
Edytujemy plik: ~/.bashrc  (znak ~ oznacza nasz katalog domowy) i wpisujemy:
mount /punkt_montowania
czyli dla przykładu gdy w pliku sftab mamy wpis:
sshfs#kyo@s10.33.13.252:/media/dane/muzyka   /home/kyo/mp3/    fuse    users,noauto    0 0

to wpisujemy:
mount ~/mp3/

Czasami zdarza się, że odchodząc od komputera wylogowujemy się, wtedy gdy będziemy się ponownie logować, skrypt ponownie się wykona i będzie chciał zamontować zasób. Dostaniemy błąd, ponieważ zasób jest już zamontowany. Pewnym rozwiązaniem jest odmontowywanie zasobu podczas wylogowywania się. Aby to zrobić należy do pliku ~/.bash_logout dodać wpis:
fusermount ~/mp3

Mam nadzieję, że dzięki temu poradnikowi sshfs stanie się dla każdego bardzo przydatnym narzędziem.

6 przemyśleń nt. „SSHFS czyli cała sieć pod ręką”

  1. To polecenie:
    usermod -G fuse nazwa_uzytkownika
    jest niebezpieczne bo usuwa ze wszystkich grup poza fuse.
    Można dodać przełącznik -a wtedy użytkownik zostanie dopisany do grupy fuse bez usunięcia z innych.

  2. Obecnie fstab pozwala na dodanie opcji „_netdev” dla takich przypadków, wiec nie trzeba bujać się z .bashrc

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *