# SSHFS (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Ссылки по теме

- SCP and SFTP
- SFTP chroot
- Pure-FTPd
- sftpman

Состояние перевода: На этой странице представлен перевод статьи SSHFS. Дата последней синхронизации: 6 июня 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

SSHFS — клиент файловой системы на основе FUSE для монтирования удалённых каталогов через SSH-соединение.

## Установка

Установите пакет sshfs.

Совет:

- Если часто приходится монтировать файловые системы sshfs, то вас могут заинтересовать помощники sshfs, такие как qsshfsAUR, sftpman, sshmntAUR или 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-среде, с специальными владельцами и вопросами доступа.

Categories:

- FUSE (Русский)
- Secure Shell (Русский)
- Network sharing (Русский)