Автоматическое монтирование файловой системы по SSH в Linux

SSH — практически вездесущий протокол удаленного доступа, у него множество возможностей, одна из них — удаленная файловая система (SSHFS, SFTP). Довольно удобно монтировать второй компьютер или рабочую машину, а так же девайсы на android или iOS. Для последнего, правда, необходим JailBreak.

Вот и задумался я, как бы монтировать рабочий компьютер автоматом через SSH, чтобы не поднимать других демонов.

Все делается посредством файла /etc/fstab. Нужно добавить строку:

login@11.22.33.44:/  /mnt/rabota  fuse.sshfs  noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/user/.ssh/id_ecdsa,allow_other,reconnect 0 0

где login — логин SSH соединения, 11.22.33.44 — IP-адрес компьютера, /mnt/rabota — директория куда будет осуществлено монтирование. Так же есть путь к ключам /home/user/.ssh/id_ecdsa.

Ключи.

Так как монтирование выполняет root, необходимо указать пользовательскую папку с ключами, с которыми пропустит на удаленный компьютер. Соответственно, должна быть настроена авторизация по ключам.

Если вкратце, на текущем компьютере генерируется связка ключей, например командой ssh-keygen -t ecdsa -b 521 -C "$(whoami)@$(hostname)-$(date -I)". На выходе получается 2 ключа, публичный и приватный. Публичный нужно залить на удаленный компьютер, проще всего это сделать командой ssh-copy-id login@11.22.33.44. После этого стоит попробовать зайти на удаленный компьютер, запроса пароля быть не должно.

Вот и все, можно примонтировать каталог mount /mnt/rabota, а после рестарта служб или перезагрузки монтирование произойдет автоматически. Причем в монтировании участвует systemd, соответственно, в системах с другой системой инициализации, все делается иначе.

Монтирование происходит по запросу, то есть если к директории нет обращений — соединения не происходит.