SSHFS (Русский)

Ссылки по теме
SCP and SFTP
SFTP chroot
Pure-FTPd
sftpman
Состояние перевода:
На этой странице представлен перевод статьи
SSHFS
. Дата последней синхронизации: 6 июня 2021. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
SSHFS
— клиент файловой системы на основе
FUSE
для монтирования удалённых каталогов через
SSH
-соединение.
Установка
Установите
пакет
sshfs
.
Совет
Если часто приходится монтировать файловые системы sshfs, то вас могут заинтересовать помощники sshfs, такие как
qsshfs
AUR
[
ссылка недействительна
: package not found]
,
sftpman
,
sshmnt
AUR
или
fmount.py
.
Можно использовать
Google Authenticator
c sshfs для дополнительной безопасности.
Также можно использовать
SSH keys
вместо традиционного ввода пароля.
Монтирование
Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:
$ sshfs
[user@]host:[dir] mountpoint [options]
Например:
$ sshfs myuser@mycomputer:/remote/path /local/path -C -p 9876
Где
-p 9876
является номером порта,
-C
- использование сжатия. Для дополнительных опций смотрите раздел
#Опции
.
Если не указан путь, то по умолчанию он указывает на удаленную домашнюю директорию пользователя. Имя пользователя по умолчанию и опции могут быть заданы в
~/.ssh/config
. Смотрите
OpenSSH#Клиент
.
SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте
SSH keys
.
Размонтирование
Чтобы размонтировать удаленную систему:
$ fusermount3 -u
mountpoint
Например:
$ fusermount3 -u /local/path
Опции
sshfs
может автоматически конвертировать ваш и удаленный идентификатор пользователя. Используйте параметр
idmap=user
, чтобы перевести UID подключаемого пользователя к удаленному пользователю
myuser
(GID остается нетронутым):
$ sshfs myuser@mycomputer:/remote/path /local/path -o idmap=user
Если вам требуется более точный контроль над переводом идентификаторов между локальным и удаленным пользователем, то обратите внимание на
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 директории
должен
быть суперпользователь, иначе вы не сможете подключиться.
Смотрите
SFTP chroot
. Также обратите внимание в
sshd_config(5)
на
Match
,
ChrootDirectory
и
ForceCommand
.
Автомонтирование
Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к каталогу). В любом случае настройка будет происходить в
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
Описание опций:
allow_other
- позволяет другим пользователям, отличным от монтирующего (то есть обычным пользователям), получать доступ к тому, что монтируется.
default_permissions
- позволяет ядру проверять права, иначе говоря использовать актуальные права на удаленной файловой системе. А также запрещает доступ всем, кроме объявленных в
allow_other
.
uid
,
gid
- устанавливает владельца файлов в соответствии с переданными значениями;
uid
- это числовой идентификатор пользователя,
gid
- числовой идентификатор группы пользователя.
Решение проблем
Контрольный список
Для начала, прочитайте следующую страницу вики
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
'
Если вы пытаетесь использовать sshfs в роутере, работающем на DD-WRT или чем-то подобном, то решение проблемы
здесь
. (обратите внимание, что опция osftp_server=/opt/libexec/sftp-server может быть использована в командах SSH вместо патча dropbear)
Если это случается только при загрузке, то возможно, что причиной является systemd, который пытается выполнить монтирование до того, как сеть станет доступна. Это можно исправить, включив 'wait-online'-службу для вашего сетевого соединения (например, systemd-networkd-wait-online.service).
Старая тема на форуме:
sshfs: Connection reset by peer
.
Убедитесь, что ваш пользователь можешь зайти на сервер (особенно при использовании AllowUsers).
Убедитесь в том, что
Subsystem sftp /usr/lib/ssh/sftp-server
включен в
/etc/ssh/sshd_config
.
Примечание
Когда вы посылаете больше одного аргумента в sshfs, они должны разделяться запятыми. Например: '
sshfs -o sshfs_debug,IdentityFile=</path/to/key> user@server ...
')
Удаленный хост отключен
Если это сообщение появляется непосредственно после попытки использовать
sshfs
:
Сначала убедитесь, что на удаленном компьютере установлен
sftp
! Ничего не будет работать, пока пакет не будет установлен.
Затем попробуйте проверить корректность пути к
Subsystem sftp
, указанного в
/etc/ssh/sshd_config
на удаленной машине.
Проблемы с монтированием fstab
Для получения подробной отладочной информации, добавьте следующее в параметры монтирования:
ssh_command=ssh\040-vv,sshfs_debug,debug
Примечание
\040
- пробел, используемый fstab для разделения полей.
Чтобы видеть отладочную информацию, запустив при этом
mount -av
, удалите следующее:
noauto,x-systemd.automount
Смотрите также
Как монтировать файловую систему SSH, находящуюся в chroot-среде
, с специальными владельцами и вопросами доступа.