Difference between revisions of "SSHFS (Русский)"

From ArchWiki
Jump to: navigation, search
(no use mentioning a inferior alternative here)
(update interlanguage links (https://github.com/lahwaacz/wiki-scripts/blob/master/update-interlanguage-links.py))
Line 3: Line 3:
 
[[Category:Network sharing]]
 
[[Category:Network sharing]]
 
[[Category:Русский]]
 
[[Category:Русский]]
 +
[[en:SSHFS]]
 
[[es:Sshfs]]
 
[[es:Sshfs]]
 
[[it:Sshfs]]
 
[[it:Sshfs]]
 
[[ja:Sshfs]]
 
[[ja:Sshfs]]
[[en:Sshfs]]
 
 
 
Вы можете использовать sshfs для монтирования удаленной системы - доступной через [[SSH (Русский)|SSH]] - в локальную папку так, что сможете совершать любые операции над примонтированными файлами с помощью любого инструмента (копирование, переименовывание, редактирование с помощью vim и др.).
 
Вы можете использовать sshfs для монтирования удаленной системы - доступной через [[SSH (Русский)|SSH]] - в локальную папку так, что сможете совершать любые операции над примонтированными файлами с помощью любого инструмента (копирование, переименовывание, редактирование с помощью vim и др.).
  

Revision as of 13:47, 1 April 2016

Вы можете использовать sshfs для монтирования удаленной системы - доступной через SSH - в локальную папку так, что сможете совершать любые операции над примонтированными файлами с помощью любого инструмента (копирование, переименовывание, редактирование с помощью vim и др.).

Установка

Установите sshfs из официальных репозиториев.

Монтирование

Совет: Можно использовать Google Authenticator c sshfs для дополнительной безопасности.

Перед монтированием, убедитесь, что права целевой директории позволят получить к ней соответствующий доступ. Монтирование удаленного каталога:

$ sshfs USERNAME@HOSTNAME_OR_IP:/REMOTE_PATH LOCAL_MOUNT_POINT SSH_OPTIONS

Например:

$ sshfs sessy@mycomputer:/remote/path /local/path -C -p 9876 -o allow_other

Где -p 9876 является номером порта, -C - использование сжатия и -o allow_other дает разрешение обычным пользователям доступ на чтение/запись.

{{Note (Русский)|Пользователи могут задать нестандартный порт в host-by-host конфигурации в ~/.ssh/config, чтобы избежать параметра -p. Для получения дополнительной информации смотрите [[Secure Shell (Русский)#Сохранение данных о подключении в конфигурационном файле ssh].]}}

SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте: как использовать ключ аутентификации RSA с SSH или SSH Keys.

Совет: Чтобы быстро смонтировать удаленную директорию, сделать нужные файловые манипуляции и размонтировать ее, добавьте в скрипт следующее:
sshfs USERNAME@HOSTNAME_OR_IP:/REMOTE_PATH LOCAL_MOUNT_POINT SSH_OPTIONS
mc LOCAL_MOUNT_POINT
fusermount -u LOCAL_MOUNT_POINT
Скрипт смонтирует удаленный каталог, запустит MC и размонтирует при выходе.

Размонтирование

Чтобы отмонтировать удаленную систему:

$ fusermount -u LOCAL_MOUNT_POINT

Например:

$ fusermount -u /mnt/sessy

Изменение корневого каталога

Вы можете привязать (определенного) пользователя к конкретной директории путем редактирования /etc/ssh/sshd_config:

/etc/ssh/sshd_config
.....
Match User someuser 
       ChrootDirectory /chroot/%u
       ForceCommand internal-sftp #ограничить пользователя только в sftp
       AllowTcpForwarding no
       X11Forwarding no
.....
Примечание: Владельцем chroot директории должен быть суперпользователь, иначе вы не сможете подключиться. Обратитесь к страницам man для получения дополнительной информации по Match, ChrootDirectory и ForceCommand.

Помощники

Если часто приходиться монтировать файловые системы sshfs, то вас может заинтересовать помощник для sshfs, например, sftpman.

Доступ к нему можно получить при помощи интерфейса командной строки или GTK-интерфейса. Монтирование/размонтирование выполняется одной/одним командой/кликом.

Автоматическое монтирование

Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к директории). В обоих случаях настройка будет происходить в /etc/fstab.

Примечание: Запомните, что автоматическое монтирование выполняется с правами суперпользователя, поэтому вы не можете использовать .ssh/config обычного пользователя.

Чтобы разрешить суперпользователю использовать ключ SSH обычного пользователя, нужно указать полный путь в опции IdentityFile.

Самое главное - используйте хотя бы раз каждую примонтированную файловую систему sshfs в режиме суперпользователя, таким образом подписи хоста будут добавлены в файл .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")
Совет:

Существует еще 2 способа для создания такого типа монтирования. Они не требуют редактирования /etc/fstab для создания новой точки монтирования. Вместо этого, обычные пользователи смогут создавать точки монтирования, просто пытаясь получить к ним доступ (например, ls ~/mnt/ssh/[user@]yourremotehost[:port]):

  • autosshfs-gitAUR - использует AutoFS. Пользователям нужно включить ее при помощи autosshfs-user.
  • afuseAUR - универсальный пользовательский автомонтировщик для файловых систем FUSE. Он также прекрасно работает и с sshfs. Не требуется никаких активаций со стороны пользователя. Пример: afuse -o mount_template='sshfs -o ServerAliveInterval=10 -o reconnect %r:/ %m' -o unmount_template='fusermount -u -z %m' ~/mnt/ssh

При загрузке

Пример того, как использовать 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 установлен, чтобы быть уверенным в доступности сети перед монтированием.

Безопасный доступ пользователей

Когда используется автомонтирование через /etc/fstab, файловая система будет монтироваться от суперпользователя. По умолчанию, это приводит к нежелательным результатам, если вы хотите получать доступ как обычный пользователь и ограничить доступ другим пользователям.

Пример конфигурации:

USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY  /LOCAL/MOUNTPOINT  fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0 0

Описание опций:

  • allow_other - позволяет другим пользователям отличным от монтирующего (т.е. суперпользователь) получать доступ к монтируемуму.
  • default_permissions - позволяет ядру проверять права, т.е. использовать актуальные права на удаленной файловой системе. А также запрещает доступ всем, кроме объявленных в allow_other.
  • uid, gid - устанавливает владельца файлов в соответствии с переданными значениями; uid - это числовой идентификатор пользователя, gid - числовой идентификатор группы пользователя.

Параметры

sshfs может автоматически конвертировать ваш и удаленный идентификатор пользователя.

Добавьте параметр idmap с значением user, чтобы переводить идентификатор подключаемого пользователя:

# sshfs -o idmap=user sessy@mycomputer:/home/sessy /mnt/sessy -C -p 9876

Это действие сопоставит идентификатор удаленного пользователя "sessy" с идентификатором локального пользователя, который запускает этот процесс ("суперпользователь" в примере выше) и идентификатор группы пользователя останется неизменным. Если вам требуется более точный контроль над переводом идентификатора пользователя и его группы, то посмотрите на параметры idmap=file, uidfile и gidfile.

Решение проблем

Контрольный список

Для начала, прочитайте следующую страницу вики Secure_Shell (Русский)#Проверка. Проблемы, которые следует проверить:

1. Получает ли ваш логин SSH дополнительную информацию от сервера, например, такую как файл /etc/issue? Это может быть причиной некорректной работы SSHFS. Вас следует временно деактивировать данный файл:

$ 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 в непустые директории.

7. Если вы хотите автоматически монтировать объекты SSH используя публичный ключ аутентификации (без пароля) через /etc/fstab, то используйте следующую линию как пример;

USER_S@SERVER:/mnt/on/server      /nmt/on/client        fuse.sshfs      x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USER_C/.ssh/id_rsa,allow_other,default_permissions,uid=USER_C_ID,gid=GROUP_C_ID,umask=0   0 0

и учитывая следующий пример настроек...

  • SERVER = Имя сервера (serv)
  • USER_S = Имя пользователя сервера (pete)
  • USER_C = Имя пользователя клиента (pete)
  • USER_S_ID = Идентификатор пользователя сервера (1004)
  • USER_C_ID = Идентификатор пользователя клиента (1000)
  • GROUP_C_ID = Идентификатор группы пользователя клиента (100)

Вы можете получить идентификатор пользователя и группы посредством следующей команды:

$ id ИМЯПОЛЬЗОВАТЕЛЯ

Вот конечная строка для монтирования SSHFS в /etc/fstab:

pete@serv:/mnt/on/server      /nmt/on/client        fuse.sshfs      x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/pete/.ssh/id_rsa,allow_other,default_permissions,uid=1004,gid=1000,umask=0   0 0

8. Если вам известны еще проблемы для этого контрольного списка, то, пожалуйста, добавьте их выше.

Сброс соединения пиром

  • Если вы пытаетесь получить доступ к удаленной машине, используя имя хоста, то попробуйте использовать ее адрес или доменной имя, смотря, что исправит проблему. Убедитесь в том, что вы изменили /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)
  • Старая форумская тема: 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! Ничего не будет работать, пока пакет не будет установлен.
Совет: Если удаленный сервер работает под управлением OpenWRT: opkg install openssh-sftp-server сделает все нужное.
  • Затем, попробуйте проверить корректность пути к Subsystem, указанный в /etc/ssh/sshd_config на удаленной машине. Вы можете проверить путь посредством find / -name sftp-server.

Для Arch Linux значением по умолчанию в /etc/ssh/sshd_config является Subsystem sftp /usr/lib/ssh/sftp-server.

Подвисание приложений (например, Nautilus, Gedit)

Примечание: Этот способ предотвращает от загрязнения список последних использованных файлов и может привести к возможным ошибкам записи.

Если у вас подвисают (не отвечают) приложения, вам возможно придется отключить защиту от записи файлу ~/recently-used.xbel.

# chattr +i /home/USERNAME/.local/share/recently-used.xbel

Смотрите следующий отчет об ошибке для более подробной информации и/или решения.

Завершение работы зависает, когда sshfs примонтирована

Systemd может зависать при завершении работы если sshfs примонтирована вручную и не отмонтирована перед выключением. Чтобы решить эту проблему, создайте следующий файл (как суперпользователь):

/etc/systemd/system/killsshfs.service
[Unit]
After=network.target

[Service]
RemainAfterExit=yes
ExecStart=-/bin/true
ExecStop=-/usr/bin/pkill sshfs

[Install]
WantedBy=multi-user.target

Затем включите службу killsshfs.service.

Смотрите также