Автомонтирование sshfs/curlftpfs с помощью autofs в Debian'е
Решил настроить автомонтирование удалённых серверов. Начал с sshfs, с ним оказалось всё до обидного просто: буквально по третей ссылке в гугле по запросу «sshfs autofs» была найдена замечательная статья, по которой всё работает. Заодно решил наладить и curlftpfs. В том же гугле была найдена другая статья, но предлагаемое решение мне категорически не понравилось: оно строиться на скриптах-обёртках вокруг curlftpfs, что очень, на мой взгляд, некузяво.
Тут резко вспоминаем, что autofs может настраиваться не только статическими файлами с маппингом каталог-устройство, но и с помощью скриптов. Для этого надо сделать следующее:
- в файле /etc/auto.master как обычно прописываем:
/remote/ftp /etc/auto.ftp uid=1001,gid=1001,--timeout=30,--ghost
- этот файл /etc/auto.ftp делаем исполнимым:
chmod a+x /etc/auto.ftp
- пишем в нём скрипт для маппинга.
Скрипту в первом параметре передаётся «ключ», то есть каталог в который юзер пытается перейти в каталоге под управлением 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.