edit

Автомонтирование sshfs/curlftpfs с помощью autofs в Debian'е

event Fri 10 Jul '09
language ru
code code

Решил настроить автомонтирование удалённых серверов. Начал с sshfs, с ним оказалось всё до обидного просто: буквально по третей ссылке в гугле по запросу «sshfs autofs» была найдена замечательная статья, по которой всё работает. Заодно решил наладить и curlftpfs. В том же гугле была найдена другая статья, но предлагаемое решение мне категорически не понравилось: оно строиться на скриптах-обёртках вокруг curlftpfs, что очень, на мой взгляд, некузяво.

Тут резко вспоминаем, что autofs может настраиваться не только статическими файлами с маппингом каталог-устройство, но и с помощью скриптов. Для этого надо сделать следующее:

  1. в файле /etc/auto.master как обычно прописываем:
/remote/ftp /etc/auto.ftp   uid=1001,gid=1001,--timeout=30,--ghost
  1. этот файл /etc/auto.ftp делаем исполнимым:
chmod a+x /etc/auto.ftp
  1. пишем в нём скрипт для маппинга.

Скрипту в первом параметре передаётся «ключ», то есть каталог в который юзер пытается перейти в каталоге под управлением autofs (первая колонка в стандартном файле маппинга autofs), скрипт должен на стандартный вывод вывести два поля разделённых пробельным симоволом: строка с опциями монтирования и строка, определяющая объект монтирования (например устройство), то есть по сути два остальных поля в стандартном файле маппинга.

Чтобы не плодить сущностей был создан один единственный унверсальный скрипт /etc/auto.remote:

#!/bin/sh

key="$1"
opts="-fstype=fuse,rw,nodev,nosuid,nonempty,noatime,allow_other"

case $0 in
*.ssh) proto="sshfs"; key="$key\\\\:" ;;
*.ftp) proto="curlftpfs" ;;
*) exit 1 ;;
esac

echo "$opts" ":$proto\\\\#$key"

После чего на этот скрипт были проброшены линки:

ln -s /etc/auto.remote /etc/auto.ssh
ln -s /etc/auto.remote /etc/auto.ftp

Этот скрипт позволяет автоматически монтировать ssh и ftp хосты (в зависимости от того, под каким именем он был вызван). Единственное, о чём не стоит забывать, что выполняется монтирование autofs'ом от имени рута, так что все ftp-пароли в ~/.netrc, настройки коннекта ssh в ~/.ssh/config и соответствующие ssh-ключики должны быть продублированы в доме рута (по умолчанию /root) со всеми вытекающими... За то в результате мы получаем прозрачное монтирование-размонтирование удалённых ftp и ssh хостов: просто нужно зайти в соответствующий каталог и оно само автомагически подключится (или не подключится :), а после некоторого времени без доступа к этому каталогу (в примере указано 30 секунд, см. параметр --timeout), оно само же и отключится. Пользуйтесь на здоровье!

P.S. Перед всеми этими упражнениями строго рекомендуется изучить маны по autofs, auto.master, curlftpfs, sshfs, ssh и netrc!

P.P.S. Дебиановские пакеты, заюзанные для настойки всего этого (пользую Debian Squeeze): autofs5 curlftpfs sshfs.