SSHFS — клиент файловой системы на основе FUSE для монтирования удалённых каталогов через SSH-соединение.
Установите пакет sshfs.
apt-get install sshfs
Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:
$ sshfs [user@]host:[dir] mountpoint [options]
Например:
$ sshfs user@IP:/remote/dir /local/dir -C -p 2244
Где -p 2244
является номером порта, -C
- использование сжатия. Для дополнительных опций смотрите раздел Опции.
Если не указан путь, то по умолчанию он указывает на удаленную домашнюю директорию пользователя. Имя пользователя по умолчанию и опции могут быть заданы в ~/.ssh/config
.
SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте SSH keys.
Чтобы размонтировать удаленную систему:
$ fusermount3 -u /local/dir
или
$ гmount /local/dir
sshfs может автоматически конвертировать ваш и удаленный идентификатор пользователя. Используйте параметр idmap=user
, чтобы перевести UID подключаемого пользователя к удаленному пользователю myuser
(GID остается нетронутым):
$ sshfs user@IP:/remote/dir /local/dir -o idmap=user
или
$ /usr/bin/sshfs -o uid=1001,gid=1001,follow_symlinks,identityfile=/afap/id_rsa,allow_other,default_permissions,reconnect -p 22 node_37@185.220.195.164:/ /afap/sftp_af
Если вам требуется более точный контроль над переводом идентификаторов между локальным и удаленным пользователем, то обратите внимание на idmap=file
, uidfile
и gidfile
.
Полный список опций вы можете найти в sshfs(1).
Вы можете привязать определенного пользователя к конкретной директории на удаленной системе. Это может быть выполнено путем редактирования /etc/ssh/sshd_config
:
/etc/ssh/sshd_config ...
Match User "someuser"
ChrootDirectory "/chroot/%u"
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
...
Примечание: Владельцем chroot директории должен быть суперпользователь, иначе вы не сможете подключиться.
Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к каталогу). В любом случае настройка будет происходить в fstab.
Примечание: Запомните, что автоматическое монтирование выполняется с правами суперпользователя, поэтому вы не можете использовать
.ssh/config
обычного пользователя.
Чтобы разрешить суперпользователю использовать ключ SSH обычного пользователя, нужно указать полный путь в опции IdentityFile
.
Самое главное - используйте хотя бы раз каждую примонтированную файловую систему sshfs в режиме суперпользователя, таким образом подписи хоста будут добавлены в файл /root/.ssh/known_hosts
.
Посредством systemd можно монтировать по запросу, используя /etc/fstab
.
Например:
user@host:/remote/folder /mount/point fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/user/.ssh/id_rsa,allow_other,reconnect 0 0
Главные опции - noauto,x-systemd.automount,_netdev
.
noauto
- монтирование не будет происходит при загрузке.x-systemd.automount
- делает магию, связанную с запросом._netdev
- показывает, что это сетевое устройство, а не блочное (без этой опции может появится ошибка "No such device")Примечание: После редактирования
/etc/fstab
, (пере)запустите соответствующий сервис:systemctl daemon-reload && systemctl restart <цель>
; можно найти<цель>
, используяsystemctl list-unit-files --type automount
Пример того, как использовать sshfs для монтировании удаленной файловой системы при помощи /etc/fstab
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs defaults,_netdev 0 0
Для примера возьмите линию из fstab
llib@192.168.1.200:/home/llib/FAH /media/FAH2 fuse.sshfs defaults,_netdev 0 0
Выше приведенная строка будет работать только в том случае, если вы используете SSH ключ. Смотрите SSH keys.
Если вы не единственный пользователь, использующий sshfs:
user@domain.org:/home/user /media/user fuse.sshfs defaults,allow_other,_netdev 0 0
Очень важно убедится в том, что параметр _netdev установлен, чтобы быть уверенным в доступности сети перед монтированием.
Когда используется автомонтирование через fstab, файловая система будет монтироваться от суперпользователя. По умолчанию, это приводит к нежелательным результатам, если вы хотите получать доступ как обычный пользователь и ограничить доступ другим пользователям.
Пример конфигурации:
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,follow_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0
Описание опций:
Для начала, прочитайте следующую страницу вики OpenSSH#Проверка. Пункты, которые следует проверить:
1. Получает ли ваш логин SSH дополнительную информацию от сервера, например, файл /etc/issue
? Это может запутать SSHFS. Вам следует временно отключить серверный файл /etc/issue
:
$ mv /etc/issue /etc/issue.orig
2. Имейте в виду, что большинство статей по устранению неполадок, связанных с SSH, не связаны с Systemd. Часто определения в /etc/fstab
ошибочно начинаются с sshfs#user@host:/mnt/server/folder ... fuse ...
вместо того, чтобы использовать следующий синтаксис user@host:/mnt/server/folder ... fuse.sshfs ... x-systemd, ...
.
3. Убедитесь в том, что владелец исходной папки и ее содержимого на сервере владеет соответствующий пользователь:
$ chown -R USER_S: /mnt/servers/folder
4. Серверный идентификатор пользователя может отличаться от соответствующего клиентского. Очевидно, что имена пользователей будут одинаковыми. Вам просто нужно позаботиться о клиентском идентификаторе. SSHFS будет преобразовывать идентификатор пользователя посредством следующего параметра:
uid=
USER_C_ID
,gid=
GROUP_C_ID
5. Проверьте, чтобы клиент имел права на целевую точку монтирования (каталог). Данная директория должна иметь такой же идентификатор, как в настройках монтирования SSHFS.
$ chown -R USER_C: /mnt/client/folder
6. Проверьте, что точка монтирования (папка) пуста. По умолчанию, вы не можете монтировать каталоги SSHFS в непустые директории.
/etc/hosts
в соответствии со свойствами сервера.-i .ssh/my_key
, то это не будет работать. Вам следует использовать -o IdentityFile=/home/user/.ssh/my_key
с указанием полного пути к ключу./root/.ssh/config
является символической ссылкой, то вы получите сообщение об ошибке. Смотрите эту темуsshfs_debug
' (как в 'sshfs -o sshfs_debug user@server ...
') может помочь в решении проблемы.debug
'Subsystem sftp /usr/lib/ssh/sftp-server
включен в /etc/ssh/sshd_config
.Примечание: Когда вы посылаете больше одного аргумента в sshfs, они должны разделяться запятыми. Например: 'sshfs -o sshfs_debug,IdentityFile=</path/to/key> user@server ...
')
Если это сообщение появляется непосредственно после попытки использовать sshfs:
Subsystem sftp
, указанного в /etc/ssh/sshd_config
на удаленной машине.Для получения подробной отладочной информации, добавьте следующее в параметры монтирования:
ssh_command=ssh\040-vv,sshfs_debug,debug
Примечание: \040
- пробел, используемый fstab для разделения полей.
Чтобы видеть отладочную информацию, запустив при этом mount -av
, удалите следующее:
noauto,x-systemd.automount