Как смонтировать удаленный каталог с помощью SSH чтобы быть доступным так же, как если бы это был локальный каталог?
Сначала установите модуль:
sudo apt-get install sshfsЗагрузите его в ядро:
sudo modprobe fuseНастройка разрешений (версии Ubuntu < 16.04):
sudo adduser $USER fusesudo chown root:fuse /dev/fusesudo chmod +x /dev/fusermountТеперь мы создадим каталог для монтирования удаленной папки.
Я решил создать его в своем домашнем каталоге и вызвать его remoteDir.
mkdir ~/remoteDirТеперь я запустил команду для его монтирования (монтирование на home):
sshfs maythux@192.168.xx.xx:/home/maythuxServ/Mounted ~/remoteDirТеперь он должен быть смонтирован:
cd ~/remoteDirls -l
Настройка аутентификации на основе ключа ssh
Сгенерируйте пару ключей на локальном хосте.
$ ssh-keygen -t rsaПримите все предложения с помощью клавиши enter.
Скопируйте открытый ключ на удаленный хост:
$ ssh-copy-id -i .ssh/id_rsa.pub user@hostУстановка sshfs
$ sudo apt install sshfsСмонтировать удаленный каталог
$ sshfs user@host:/remote_directory /local_directoryНе пытайтесь добавлять удаленные fs в /etc/fstab
Или не пытайтесь монтировать общие ресурсы через /etc/rc.local .
В обоих случаях это не сработает, так как сеть недоступна, когда init читает /etc/fstab.
Установите AutoFS
$ sudo apt install autofsРедактировать /etc/auto.master
Закомментируйте следующие строки
#+/etc/auto.master.d#+/etc/auto.masterДобавить новую строку
/- /etc/auto.sshfs --timeout=30Сохранить и выйти
Редактировать /etc/auto.sshfs
Добавить новую строку
/local_directory -fstype=fuse,allow_other,IdentityFile=/local_private_key :sshfs\#user@remote_host\:/remote_directoryИмя удаленного пользователя обязательно.
Сохранить и выйти
Запуск проверки подлинности в режиме отладки
$ sudo service autofs stop$ sudo automount -vfПросматривайте журналы удаленного ssh-сервера
$ ssh user@remote_server$ sudo tailf /var/log/secureПроверьте содержимое локального каталога
Вы должны увидеть содержимое удаленного каталога
Запустите автоматическую проверку в обычном режиме
Остановите автоматическую проверку, запущенную в режиме отладки, с помощью CTRL-C.
Запустите автоматическую проверку в обычном режиме
$ sudo service autofs startНаслаждаться
(Протестировано на Ubuntu 14.04)
Основываясь на моих экспериментах, явное создание группы fuse и добавление в нее вашего пользователя не требуется для монтирования файловой системы ssh.
Подводя итог, вот шаги, скопированные с этой страницы:
- Устанавливать
sshfs
$ sudo apt-get install sshfs
2.Создайте локальную точку монтирования
$ mkdir /home/johndoe/sshfs-path/
3.Смонтируйте удаленную папку /remote/path к /home/johndoe/sshfs-path/
$ sshfs remoteuser@111.222.333.444:/remote/path /home/johndoe/sshfs-path/
- И, наконец, к umount ...
$ fusermount -u /home/johndoe/sshfs-path/
Установка sshfs
sudo apt-get install sshfs
Добавить в fstab:
<USER>@<SERVER_NAME>:<server_path> <local_path> fuse.sshfs delay_connect,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/<YOUR_USER_NAME>/.ssh/id_rsa,allow_other,default_permissions,rw,nosuid,nodev,uid=1000,gid=1000,nonempty 0 0
Хотя это не совсем отвечает на ваш вопрос, но я просто хотел упомянуть, что вы также можете достичь той же цели, используя "sftp". Просто в адресной строке вашего файлового менеджера введите эту команду:
sftp://remoteuser@111.222.333.444/remote/path
Простой способ запустить монтирование sshfs при запуске - это также добавить его в root (или другого пользователя) crontab, например:
@reboot sshfs remoteuser@111.222.333.444:/remote/path /home/johndoe/sshfs-path/И если вам нужно добавить задержку, вы можете использовать:
@reboot sleep 60 && sshfs remoteuser@111.222.333.444:/remote/path /home/johndoe/sshfs-path/
Я хотел бы предупредить, что, похоже, по умолчанию только пользователь, который настроил монтирование может получить доступ к удаленному каталогу.
Я настраиваю удаленный каталог и создаю crontab с sudo crontab -e. Позже я узнал, что файл резервной копии вообще не записывал удаленный каталог. Потом я обнаружил, что не могу cd на удаленный диск, как root ! Так что в конце концов я создаю ту же задачу с crontab -e и все работает так, как я и ожидал.