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

From ArchWiki
Jump to: navigation, search
m (fix categories, see Help:i18n)
(add TranslationStatus template)
 
(39 intermediate revisions by 5 users not shown)
Line 4: Line 4:
 
[[Category:Русский]]
 
[[Category:Русский]]
 
[[en:SSHFS]]
 
[[en:SSHFS]]
[[es:Sshfs]]
 
[[it:Sshfs]]
 
 
[[ja:Sshfs]]
 
[[ja:Sshfs]]
Вы можете использовать sshfs для монтирования удаленной системы - доступной через [[SSH (Русский)|SSH]] - в локальную папку так, что сможете совершать любые операции над примонтированными файлами с помощью любого инструмента (копирование, переименовывание, редактирование с помощью vim и др.).
+
[[zh-hans:SSHFS]]
 +
{{Related articles start (Русский)}}
 +
{{Related|SCP and SFTP}}
 +
{{Related|SFTP chroot}}
 +
{{Related|Pure-FTPd}}
 +
{{Related|Secure Shell (Русский)}}
 +
{{Related|sftpman}}
 +
{{Related articles end}}
 +
 
 +
{{TranslationStatus (Русский)|SSHFS|23 февраля 2018|499981}}
 +
 
 +
[https://github.com/libfuse/sshfs SSHFS] - клиент файловой системы на основе FUSE для монтирования удаленных каталогов через подключение [[SSH (Русский)|SSH]].
  
 
== Установка ==
 
== Установка ==
  
[[Установите]] {{Pkg|sshfs}} из [[Official repositories (Русский)|официальных репозиториев]].
+
[[Установите]] пакет {{Pkg|sshfs}}
  
 +
{{Tip (Русский)|
 +
*Если часто приходится монтировать файловые системы sshfs, то вас могут заинтересовать помощники sshfs, такие как {{AUR|qsshfs}}, [[sftpman]], {{AUR|sshmnt}} или [https://github.com/lahwaacz/Scripts/blob/master/fmount.py fmount.py].
 +
*Можно использовать [[Google Authenticator (Русский)|Google Authenticator]] c sshfs для дополнительной безопасности.
 +
*Также можно использовать [[SSH keys]] вместо традиционного ввода пароля.}}
 
=== Монтирование ===
 
=== Монтирование ===
  
{{Tip (Русский)|Можно использовать [[Google Authenticator (Русский)|Google Authenticator]] c sshfs для дополнительной безопасности.}}
+
Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:
 
 
Перед монтированием, убедитесь, что права целевой директории позволят получить к ней соответствующий доступ. Монтирование удаленного каталога:
 
  
  $ sshfs ''USERNAME@HOSTNAME_OR_IP:/REMOTE_PATH LOCAL_MOUNT_POINT SSH_OPTIONS''
+
  $ sshfs ''[user@]host:[dir] mountpoint [options]''
  
 
Например:
 
Например:
  
  $ sshfs sessy@mycomputer:/remote/path /local/path -C -p 9876 -o allow_other
+
  $ sshfs myuser@mycomputer:/remote/path /local/path -C -p 9876
  
Где {{ic|-p 9876}} является номером порта, {{ic|-C}} - использование сжатия и {{ic|-o allow_other}} дает разрешение обычным пользователям доступ на чтение/запись.
+
Где {{ic|-p 9876}} является номером порта, {{ic|-C}} - использование сжатия. Для дополнительных опций смотрите раздел [[#Опции]].
  
{{Note (Русский)|Пользователи могут задать нестандартный порт в host-by-host конфигурации в {{ic|~/.ssh/config}}, чтобы избежать параметра -p. Для получения дополнительной информации смотрите [[Secure Shell (Русский)#Сохранение данных о подключении в конфигурационном файле ssh].]}}
+
Если не указан путь, то по умолчанию он указывает на удаленную домашнюю директорию пользователя. Имя пользователя по умолчанию и опции могут быть заданы в {{ic|~/.ssh/config}}. Смотрите [[Secure Shell#Client usage]].
  
 
SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте: [http://linuxmafia.com/~karsten/Linux/FAQs/sshrsakey.html как использовать ключ аутентификации RSA с SSH] или [[SSH keys (Русский)|SSH Keys]].
 
SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте: [http://linuxmafia.com/~karsten/Linux/FAQs/sshrsakey.html как использовать ключ аутентификации RSA с SSH] или [[SSH keys (Русский)|SSH Keys]].
  
{{Tip (Русский)|Чтобы быстро смонтировать удаленную директорию, сделать нужные файловые манипуляции и размонтировать ее, добавьте в скрипт следующее:
+
=== Размонтирование ===
 +
 
 +
Чтобы размонтировать удаленную систему:
 +
 
 +
$ fusermount3 -u ''mountpoint''
  
sshfs USERNAME@HOSTNAME_OR_IP:/REMOTE_PATH LOCAL_MOUNT_POINT SSH_OPTIONS''
+
Например:
mc LOCAL_MOUNT_POINT
 
fusermount -u LOCAL_MOUNT_POINT''
 
  
Скрипт смонтирует удаленный каталог, запустит MC и размонтирует при выходе.}}
+
$ fusermount3 -u /local/path
  
=== Размонтирование ===
+
== Опции ==
  
Чтобы отмонтировать удаленную систему:
+
''sshfs'' может автоматически конвертировать ваш и удаленный идентификатор пользователя. Используйте параметр {{ic|1=idmap=user}}, чтобы перевести UID подключаемого пользователя к удаленному пользователю {{ic|myuser}} (GID остается нетронутым):
  
  $ fusermount -u ''LOCAL_MOUNT_POINT''
+
  $ sshfs myuser@mycomputer:/remote/path /local/path -o idmap=user
  
Например:
+
Если вам требуется более точный контроль над переводом идентификаторов между локальным и удаленным пользователем, то обратите внимание на {{ic|1=idmap=file}}, {{ic|uidfile}} и {{ic|gidfile}}.
  
$ fusermount -u /mnt/sessy
+
Полный список опций вы можете найти в {{man|1|sshfs}}.
  
 
== Изменение корневого каталога ==
 
== Изменение корневого каталога ==
  
Вы можете привязать (определенного) пользователя к конкретной директории путем редактирования {{ic|/etc/ssh/sshd_config}}:
+
Вы можете привязать определенного пользователя к конкретной директории на удаленной системе. Это может быть выполнено путем редактирования {{ic|/etc/ssh/sshd_config}}:
  
 
{{hc|/etc/ssh/sshd_config|.....
 
{{hc|/etc/ssh/sshd_config|.....
Match User someuser  
+
Match User "someuser"
       ChrootDirectory /chroot/%u
+
       ChrootDirectory "/chroot/%u"
       ForceCommand internal-sftp #ограничить пользователя только в sftp
+
       ForceCommand internal-sftp
 
       AllowTcpForwarding no
 
       AllowTcpForwarding no
 
       X11Forwarding no
 
       X11Forwarding no
 
.....}}
 
.....}}
  
{{Note (Русский)|Владельцем chroot директории '''должен''' быть суперпользователь, иначе вы не сможете подключиться. Обратитесь к страницам man для получения дополнительной информации по {{ic|Match, ChrootDirectory}} и {{ic|ForceCommand}}.}}
+
{{Note (Русский)|Владельцем chroot директории '''должен''' быть суперпользователь, иначе вы не сможете подключиться.}}
 
 
== Помощники ==
 
 
 
Если часто приходиться монтировать файловые системы sshfs, то вас может заинтересовать помощник для sshfs, например, [[sftpman]].
 
  
Доступ к нему можно получить при помощи интерфейса командной строки или GTK-интерфейса. Монтирование/размонтирование выполняется одной/одним командой/кликом.
+
Смотрите [[SFTP chroot]]. Также обратите внимание в {{man|5|sshd_config}} на {{ic|Match}}, {{ic|ChrootDirectory}} и {{ic|ForceCommand}}.
  
== Автоматическое монтирование ==
+
== Автомонтирование ==
 +
 +
{{Translateme (Русский)|Перевод устарел. Установите {{Pkg|fuse2}} для {{ic|mount.fuse}} или создайте символическую ссылку {{ic|mount.fuse3}}. Смотрите {{Bug|55564}}}}
 +
{{Translateme (Русский)|1=Перевод устарел. API fuse3 больше не принимает параметр _netdev. [https://bbs.archlinux.org/viewtopic.php?id=230191 Дискуссия]}}
  
Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к директории). В обоих случаях настройка будет происходить в {{ic|/etc/[[fstab (Русский)|fstab]]}}.
+
Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к каталогу). В любом случае настройка будет происходить в {{ic|/etc/[[fstab (Русский)|fstab]]}}.
  
 
{{Note (Русский)|Запомните, что автоматическое монтирование выполняется с правами суперпользователя, поэтому вы не можете использовать {{ic|.ssh/config}} обычного пользователя.
 
{{Note (Русский)|Запомните, что автоматическое монтирование выполняется с правами суперпользователя, поэтому вы не можете использовать {{ic|.ssh/config}} обычного пользователя.
Line 77: Line 89:
 
Чтобы разрешить суперпользователю использовать ключ SSH обычного пользователя, нужно указать полный путь в опции {{ic|IdentityFile}}.
 
Чтобы разрешить суперпользователю использовать ключ SSH обычного пользователя, нужно указать полный путь в опции {{ic|IdentityFile}}.
  
'''Самое главное''' - используйте хотя бы раз каждую примонтированную файловую систему sshfs '''в режиме суперпользователя''', таким образом подписи хоста будут добавлены в файл {{ic|.ssh/known_hosts}}.}}
+
'''Самое главное''' - используйте хотя бы раз каждую примонтированную файловую систему sshfs '''в режиме суперпользователя''', таким образом подписи хоста будут добавлены в файл {{ic|/root/.ssh/known_hosts}}.}}
  
 
=== По запросу ===
 
=== По запросу ===
  
С помощью systemd возможно монтирование по запросу используя {{ic|/etc/fstab}}.
+
{{Translateme (Русский)|Возможно ли заставить это работать с приватным ключом, защищенным фразой? Например, при первом доступе выводится запрос фразы. Или ясно укажите, что это невозможно и почему.}}
 +
 
 +
Посредством systemd можно монтировать по запросу, используя {{ic|/etc/fstab}}.
  
 
Например:
 
Например:
Line 90: Line 104:
  
 
* ''noauto'' - монтирование не будет происходит при загрузке.
 
* ''noauto'' - монтирование не будет происходит при загрузке.
* ''x-systemd.automount'' - делает магию связанную с запросом.
+
* ''x-systemd.automount'' - делает магию, связанную с запросом.
 
* ''_netdev'' - показывает, что это сетевое устройство, а не блочное (без этой опции может появится ошибка "No such device")
 
* ''_netdev'' - показывает, что это сетевое устройство, а не блочное (без этой опции может появится ошибка "No such device")
  
{{Tip (Русский)|
+
{{Note (Русский)|После редактирования {{ic|/etc/fstab}}, (пере)запустите соответствующий сервис: {{ic|systemctl daemon-reload && systemctl restart <цель>}};  можно найти {{ic|<цель>}}, используя {{ic|systemctl list-unit-files --type automount}}}}
Существует еще 2 способа для создания такого типа монтирования. Они не требуют редактирования {{ic|/etc/fstab}} для создания новой точки монтирования. Вместо этого, обычные пользователи смогут создавать точки монтирования, просто пытаясь получить к ним доступ (например, {{ic|ls ~/mnt/ssh/[user@]yourremotehost[:port]}}):
 
  
* {{AUR|autosshfs-git}} - использует AutoFS. Пользователям нужно включить ее при помощи {{ic|autosshfs-user}}.
+
{{Tip (Русский)|{{AUR|autosshfs-git}} не требует редактирования {{ic|/etc/fstab}} для создания новой точки монтирования. Обычные пользователи смогут создавать точки монтирования, просто пытаясь получить к ним доступ (например, {{ic|ls ~/mnt/ssh/[user@]yourremotehost[:port]}}. {{AUR|autosshfs-git}} использует AutoFS. Пользователям нужно включить ее при помощи {{ic|autosshfs-user}}.}}
* {{AUR|afuse}} - универсальный пользовательский автомонтировщик для файловых систем FUSE. Он также прекрасно работает и с sshfs. Не требуется никаких активаций со стороны пользователя. Пример: {{ic|1=afuse -o mount_template='sshfs -o ServerAliveInterval=10 -o reconnect %r:/ %m' -o unmount_template='fusermount -u -z %m' ~/mnt/ssh}}}}
 
  
 
=== При загрузке ===
 
=== При загрузке ===
Line 115: Line 127:
 
  user@domain.org:/home/user  /media/user  fuse.sshfs    defaults,allow_other,_netdev    0  0
 
  user@domain.org:/home/user  /media/user  fuse.sshfs    defaults,allow_other,_netdev    0  0
  
Очень важно убедится в том, что параметр монтирования ''_netdev'' установлен, чтобы быть уверенным в доступности сети перед монтированием.
+
Очень важно убедится в том, что параметр ''_netdev'' установлен, чтобы быть уверенным в доступности сети перед монтированием.
  
 
=== Безопасный доступ пользователей ===
 
=== Безопасный доступ пользователей ===
  
Когда используется автомонтирование через {{ic|/etc/[[fstab]]}}, файловая система будет монтироваться от суперпользователя. По умолчанию, это приводит к нежелательным результатам, если вы хотите получать доступ как обычный пользователь и ограничить доступ другим пользователям.
+
Когда используется автомонтирование через [[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
+
  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'' - позволяет другим пользователям отличным от монтирующего (т.е. суперпользователь) получать доступ к монтируемуму.
+
* ''allow_other'' - позволяет другим пользователям, отличным от монтирующего (то есть обычным пользователям), получать доступ к тому, что монтируется.
* ''default_permissions'' - позволяет ядру проверять права, т.е. использовать актуальные права на удаленной файловой системе. А также запрещает доступ всем, кроме объявленных в ''allow_other''.
+
* ''default_permissions'' - позволяет ядру проверять права, иначе говоря использовать актуальные права на удаленной файловой системе. А также запрещает доступ всем, кроме объявленных в ''allow_other''.
 
* ''uid'', ''gid'' - устанавливает владельца файлов в соответствии с переданными значениями; ''uid'' - это числовой идентификатор пользователя, ''gid'' - числовой идентификатор группы пользователя.
 
* ''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''.
 
  
 
== Решение проблем ==
 
== Решение проблем ==
Line 145: Line 147:
 
=== Контрольный список ===
 
=== Контрольный список ===
  
Для начала, прочитайте следующую страницу вики [[Secure Shell (Русский)#Проверка]]. Проблемы, которые следует проверить:
+
Для начала, прочитайте следующую страницу вики [[Secure Shell (Русский)#Проверка]]. Пункты, которые следует проверить:
  
1. Получает ли ваш логин SSH дополнительную информацию от сервера, например, такую как файл {{ic|/etc/issue}}? Это может быть причиной некорректной работы SSHFS. Вас следует временно деактивировать данный файл:
+
1. Получает ли ваш логин SSH дополнительную информацию от сервера, например, файл {{ic|/etc/issue}}? Это может запутать SSHFS. Вам следует временно отключить серверный файл {{ic|/etc/issue}}:
  
 
  $ mv /etc/issue /etc/issue.orig
 
  $ mv /etc/issue /etc/issue.orig
  
2. Имейте в виду, что большинство статей по устранению неполадок связанных с SSH, найденных в интернете, '''не''' связаны с Systemd. Часто определения в {{ic|/etc/fstab}} ошибочно начинаются с {{ic|''sshfs#''user@host:/mnt/server/folder ... fuse ...}} вместо того, чтобы использовать следующий синтаксис {{ic|user@host:/mnt/server/folder ... fuse.''sshfs'' ... ''x-systemd'', ...}}.
+
2. Имейте в виду, что большинство статей по устранению неполадок, связанных с SSH, '''не''' связаны с Systemd. Часто определения в {{ic|/etc/fstab}} ошибочно начинаются с {{ic|''sshfs#''user@host:/mnt/server/folder ... fuse ...}} вместо того, чтобы использовать следующий синтаксис {{ic|user@host:/mnt/server/folder ... fuse.''sshfs'' ... ''x-systemd'', ...}}.
  
3. Убедитесь, что владелец исходной папки и ее содержимого на сервере владеет соответственный пользователь:
+
3. Убедитесь в том, что владелец исходной папки и ее содержимого на сервере владеет соответствующий пользователь:
  
 
  $ chown -R USER_S: /mnt/servers/folder
 
  $ chown -R USER_S: /mnt/servers/folder
  
4. Серверный пользовательский идентификатор может отличаться от соответствующего клиентского. Очевидно, что имена пользователей будут одинаковыми. Вам просто нужно позаботиться о клиентском идентификаторе. SSHFS будет преобразовывать идентификатор пользователя посредством следующего параметра:
+
4. Серверный идентификатор пользователя может отличаться от соответствующего клиентского. Очевидно, что имена пользователей будут одинаковыми. Вам просто нужно позаботиться о клиентском идентификаторе. SSHFS будет преобразовывать идентификатор пользователя посредством следующего параметра:
  
 
  uid=''USER_C_ID'',gid=''GROUP_C_ID''
 
  uid=''USER_C_ID'',gid=''GROUP_C_ID''
Line 165: Line 167:
 
  $ chown -R USER_C: /mnt/client/folder
 
  $ chown -R USER_C: /mnt/client/folder
  
6. Проверьте, что точка монтирования (папка) пуста. По умолчанию вы не можете монтировать каталоги SSHFS в непустые директории.
+
6. Проверьте, что точка монтирования (папка) пуста. По умолчанию, вы не можете монтировать каталоги SSHFS в непустые директории.
 
 
7. Если вы хотите автоматически монтировать объекты SSH используя публичный ключ аутентификации (без пароля) через {{ic|/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 в {{ic|/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. Если вам известны еще проблемы для этого контрольного списка, то, пожалуйста, добавьте их выше.
 
  
 
=== Сброс соединения пиром ===
 
=== Сброс соединения пиром ===
Line 195: Line 174:
 
* Если вы используете нестандартные имена ключей и передаете их как {{ic|-i .ssh/my_key}}, то это не будет работать. Вам следует использовать {{ic|-o IdentityFile<nowiki>=</nowiki>/home/user/.ssh/my_key}} с указанием полного пути к ключу.
 
* Если вы используете нестандартные имена ключей и передаете их как {{ic|-i .ssh/my_key}}, то это не будет работать. Вам следует использовать {{ic|-o IdentityFile<nowiki>=</nowiki>/home/user/.ssh/my_key}} с указанием полного пути к ключу.
 
* Если ваш файл {{ic|/root/.ssh/config}} является символической ссылкой, то вы получите сообщение об ошибке. Смотрите [http://serverfault.com/questions/507748/bad-owner-or-permissions-on-root-ssh-config эту тему]
 
* Если ваш файл {{ic|/root/.ssh/config}} является символической ссылкой, то вы получите сообщение об ошибке. Смотрите [http://serverfault.com/questions/507748/bad-owner-or-permissions-on-root-ssh-config эту тему]
* Добавление опции '{{ic|sshfs_debug}}' (как в '{{ic|sshfs -o sshfs_debug user@server ...}}'), может помочь в решении проблемы.
+
* Добавление опции '{{ic|sshfs_debug}}' (как в '{{ic|sshfs -o sshfs_debug user@server ...}}') может помочь в решении проблемы.
 
* Если это не помогло выявить ничего полезного, то вы можете также попробовать добавить опцию '{{ic|debug}}'
 
* Если это не помогло выявить ничего полезного, то вы можете также попробовать добавить опцию '{{ic|debug}}'
 
* Если вы пытаетесь использовать sshfs в роутере, работающем на DD-WRT или чем-то подобном, то решение проблемы [http://www.dd-wrt.com/wiki/index.php/SFTP_with_DD-WRT здесь]. (обратите внимание, что опция osftp_server=/opt/libexec/sftp-server может быть использована в командах SSH вместо патча dropbear)
 
* Если вы пытаетесь использовать sshfs в роутере, работающем на DD-WRT или чем-то подобном, то решение проблемы [http://www.dd-wrt.com/wiki/index.php/SFTP_with_DD-WRT здесь]. (обратите внимание, что опция osftp_server=/opt/libexec/sftp-server может быть использована в командах SSH вместо патча dropbear)
* Старая форумская тема: [https://bbs.archlinux.org/viewtopic.php?id=27613 sshfs: Connection reset by peer].
+
* Старая тема на форуме: [https://bbs.archlinux.org/viewtopic.php?id=27613 sshfs: Connection reset by peer].
 
* Убедитесь, что ваш пользователь можешь зайти на сервер (особенно при использовании AllowUsers).
 
* Убедитесь, что ваш пользователь можешь зайти на сервер (особенно при использовании AllowUsers).
 
* Убедитесь в том, что {{ic|Subsystem sftp /usr/lib/ssh/sftp-server}} включен в {{ic|/etc/ssh/sshd_config}}.
 
* Убедитесь в том, что {{ic|Subsystem sftp /usr/lib/ssh/sftp-server}} включен в {{ic|/etc/ssh/sshd_config}}.
  
{{Note (Русский)|Когда посылаете больше одного аргумента в sshfs, они должны разделяться запятыми. Например: '{{ic|sshfs -o sshfs_debug,IdentityFile<nowiki>=</nowiki></path/to/key> user@server ...}}')}}
+
{{Note (Русский)|Когда вы посылаете больше одного аргумента в sshfs, они должны разделяться запятыми. Например: '{{ic|sshfs -o sshfs_debug,IdentityFile<nowiki>=</nowiki></path/to/key> user@server ...}}')}}
  
 
=== Удаленный хост отключен ===
 
=== Удаленный хост отключен ===
Line 209: Line 188:
  
 
* Сначала убедитесь, что на удаленном компьютере установлен ''sftp''! Ничего не будет работать, пока пакет не будет установлен.
 
* Сначала убедитесь, что на удаленном компьютере установлен ''sftp''! Ничего не будет работать, пока пакет не будет установлен.
 +
* Затем попробуйте проверить корректность пути к {{ic|Subsystem sftp}}, указанного в {{ic|/etc/ssh/sshd_config}} на удаленной машине.
  
{{Tip (Русский)|Если удаленный сервер работает под управлением OpenWRT: {{ic|opkg install openssh-sftp-server}} сделает все нужное.}}
+
=== Зависание приложений (например, Gnome Files, Gedit) ===   
 
 
* Затем, попробуйте проверить корректность пути к {{ic|Subsystem}}, указанный в {{ic|/etc/ssh/sshd_config}} на удаленной машине. Вы можете проверить путь посредством {{ic|find / -name sftp-server}}.
 
 
 
Для Arch Linux значением по умолчанию в {{ic|/etc/ssh/sshd_config}} является {{ic|Subsystem sftp /usr/lib/ssh/sftp-server}}.
 
 
 
=== Подвисание приложений (например, Nautilus, Gedit) ===   
 
  
{{Note (Русский)|Этот способ предотвращает от загрязнения список последних использованных файлов и может привести к возможным ошибкам записи.}}
+
{{Warning (Русский)|Этот способ предотвращает от загрязнения список последних использованных файлов и может привести к возможным ошибкам записи.}}
  
Если у вас подвисают (не отвечают) приложения, вам возможно придется отключить защиту от записи файлу {{ic|~/recently-used.xbel}}.
+
Если у вас зависают (не отвечают) приложения, вам, возможно, придется отключить защиту от записи файлу {{ic|~/recently-used.xbel}}.
  
 
  # chattr +i /home/USERNAME/.local/share/recently-used.xbel
 
  # chattr +i /home/USERNAME/.local/share/recently-used.xbel
Line 226: Line 200:
 
Смотрите следующий [https://bugs.archlinux.org/task/40260 отчет об ошибке] для более подробной информации и/или решения.
 
Смотрите следующий [https://bugs.archlinux.org/task/40260 отчет об ошибке] для более подробной информации и/или решения.
  
=== Завершение работы зависает, когда sshfs примонтирована ===
+
=== Проблемы с монтированием fstab ===
  
Systemd может зависать при завершении работы если sshfs примонтирована вручную и не отмонтирована перед выключением. Чтобы решить эту проблему, создайте следующий файл (как суперпользователь):
+
Для получения подробной отладочной информации, добавьте следующее в параметры монтирования:
  
{{hc|/etc/systemd/system/killsshfs.service|<nowiki>
+
ssh_command=ssh\040-vv,sshfs_debug,debug
[Unit]
 
After=network.target
 
  
[Service]
+
{{Note|{{ic|\040}} - пробел, используемый fstab для разделения полей.}}
RemainAfterExit=yes
 
ExecStart=-/bin/true
 
ExecStop=-/usr/bin/pkill sshfs
 
  
[Install]
+
Чтобы видеть отладочную информацию, запустив при этом {{ic|mount -av}}, удалите следующее:
WantedBy=multi-user.target
 
</nowiki>}}
 
  
Затем [[включите]] службу {{ic|killsshfs.service}}.
+
noauto,x-systemd.automount
  
 
== Смотрите также ==
 
== Смотрите также ==
  
* [[sftpman]] - помощник sshfs
 
* [[SSH]]
 
 
* [http://wiki.gilug.org/index.php/How_to_mount_SFTP_accesses Как монтировать файловую систему SSH, находящуюся в chroot-среде], с специальными владельцами и вопросами доступа.
 
* [http://wiki.gilug.org/index.php/How_to_mount_SFTP_accesses Как монтировать файловую систему SSH, находящуюся в chroot-среде], с специальными владельцами и вопросами доступа.
 +
* [http://www.admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS SSHFS – установка и производительность] — сравнение с NFS и подсказки по оптимизации.

Latest revision as of 16:08, 23 February 2018

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

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. Смотрите Secure Shell#Client usage.

SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте: как использовать ключ аутентификации RSA с 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.

Автомонтирование

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Перевод устарел. Установите fuse2 для mount.fuse или создайте символическую ссылку mount.fuse3. Смотрите FS#55564 (обсуждение: Talk:SSHFS (Русский)#)

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Перевод устарел. API fuse3 больше не принимает параметр _netdev. Дискуссия (обсуждение: Talk:SSHFS (Русский)#)

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

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

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

Самое главное - используйте хотя бы раз каждую примонтированную файловую систему sshfs в режиме суперпользователя, таким образом подписи хоста будут добавлены в файл /root/.ssh/known_hosts.

По запросу

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Возможно ли заставить это работать с приватным ключом, защищенным фразой? Например, при первом доступе выводится запрос фразы. Или ясно укажите, что это невозможно и почему. (обсуждение: Talk:SSHFS (Русский)#)

Посредством 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
Совет: autosshfs-gitAUR не требует редактирования /etc/fstab для создания новой точки монтирования. Обычные пользователи смогут создавать точки монтирования, просто пытаясь получить к ним доступ (например, ls ~/mnt/ssh/[user@]yourremotehost[:port]. autosshfs-gitAUR использует AutoFS. Пользователям нужно включить ее при помощи autosshfs-user.

При загрузке

Пример того, как использовать 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 0

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

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

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

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

Для начала, прочитайте следующую страницу вики 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 в непустые директории.

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

  • Если вы пытаетесь получить доступ к удаленной машине, используя имя хоста, то попробуйте использовать ее адрес или доменной имя, смотря, что исправит проблему. Убедитесь в том, что вы изменили /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

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

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

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

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

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

noauto,x-systemd.automount

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