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

From ArchWiki
Jump to: navigation, search
(Монтирование: sync and translate)
m (Монтирование)
Line 24: Line 24:
 
{{Tip (Русский)|Если часто приходится монтировать файловые системы sshfs, то вас могут заинтересовать помощники sshfs, такие как {{AUR|qsshfs}}, [[sftpman]], {{AUR|sshmnt}} или [https://github.com/lahwaacz/Scripts/blob/master/fmount.py fmount.py].}}
 
{{Tip (Русский)|Если часто приходится монтировать файловые системы sshfs, то вас могут заинтересовать помощники sshfs, такие как {{AUR|qsshfs}}, [[sftpman]], {{AUR|sshmnt}} или [https://github.com/lahwaacz/Scripts/blob/master/fmount.py fmount.py].}}
 
=== Монтирование ===
 
=== Монтирование ===
 
 
  
 
Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:
 
Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:
  
  $ sshfs [user@]host:[каталог] mountpoint [параметры]
+
  $ sshfs ''[user@]host:[dir] mountpoint [options]''
  
 
Например:
 
Например:

Revision as of 10:50, 8 August 2017

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

Установка

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

Совет: Если часто приходится монтировать файловые системы sshfs, то вас могут заинтересовать помощники sshfs, такие как qsshfsAUR, sftpman, sshmntAUR или fmount.py.

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

Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:

$ sshfs [user@]host:[dir] mountpoint [options]

Например:

$ sshfs myuser@mycomputer:/remote/path /local/path -C -p 9876

Где -p 9876 является номером порта, -C - использование сжатия. Для дополнительных опций смотрите раздел #Параметры.

Если не указан путь, то по умолчанию он указывает на удаленную домашнюю директорию пользователя. Имя пользователя по умолчанию и опции могут быть заданы в ~/.ssh/config. Смотрите Secure Shell#Client usage.

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

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

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

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

$ 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 директории должен быть суперпользователь, иначе вы не сможете подключиться. Для получения дополнительной информации смотрите страницы справочного руководства 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")
Примечание: После редактирования /etc/fstab, (пере)запустите соответствующий сервис: systemctl daemon-reload && systemctl restart <цель>; можно найти <цель>, используя systemctl list-unit-files --type automount
Совет:

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

  • autosshfs-gitAUR - использует AutoFS. Пользователям нужно включить ее при помощи autosshfs-user.
  • afuseAUR[ссылка недействительна: package not found] - универсальный пользовательский автомонтировщик для файловых систем 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,follow_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. Вам следует временно отключить серверный файл /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 в непустые директории.

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! Ничего не будет работать, пока пакет не будет установлен.
  • Затем попробуйте проверить корректность пути к Subsystem sftp, указанного в /etc/ssh/sshd_config на удаленной машине.

Зависание приложений (например, Gnome Files, 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 -x sshfs

[Install]
WantedBy=multi-user.target

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

Проблемы с монтированием fstab

Для получения подробной отладочной информации, добавьте следующее в параметры монтирования:

ssh_command=ssh\040-vv,sshfs_debug,debug
Note: \040 - пробел, используемый fstab для разделения полей.

Чтобы видеть отладочную информацию, запустив при этом mount -av, удалите следующее:

noauto,x-systemd.automount

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