Difference between revisions of "SSHFS (Русский)"
Lahwaacz.bot (talk | contribs) (update interlanguage links (https://github.com/lahwaacz/wiki-scripts/blob/master/update-interlanguage-links.py)) |
Lahwaacz.bot (talk | contribs) (simplification and beautification of wikilinks, fixing whitespace, capitalization and section fragments (https://github.com/lahwaacz/wiki-scripts/blob/master/link-checker.py (interactive))) |
||
Line 145: | Line 145: | ||
=== Контрольный список === | === Контрольный список === | ||
− | Для начала, прочитайте следующую страницу вики [[ | + | Для начала, прочитайте следующую страницу вики [[Secure Shell (Русский)#Проверка]]. Проблемы, которые следует проверить: |
1. Получает ли ваш логин SSH дополнительную информацию от сервера, например, такую как файл {{ic|/etc/issue}}? Это может быть причиной некорректной работы SSHFS. Вас следует временно деактивировать данный файл: | 1. Получает ли ваш логин SSH дополнительную информацию от сервера, например, такую как файл {{ic|/etc/issue}}? Это может быть причиной некорректной работы SSHFS. Вас следует временно деактивировать данный файл: |
Revision as of 11:57, 30 April 2016
Вы можете использовать sshfs для монтирования удаленной системы - доступной через SSH - в локальную папку так, что сможете совершать любые операции над примонтированными файлами с помощью любого инструмента (копирование, переименовывание, редактирование с помощью vim и др.).
Contents
Установка
Установите 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.
Размонтирование
Чтобы отмонтировать удаленную систему:
$ 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 .....
Помощники
Если часто приходиться монтировать файловые системы sshfs, то вас может заинтересовать помощник для sshfs, например, sftpman.
Доступ к нему можно получить при помощи интерфейса командной строки или GTK-интерфейса. Монтирование/размонтирование выполняется одной/одним командой/кликом.
Автоматическое монтирование
Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к директории). В обоих случаях настройка будет происходить в /etc/fstab
.
По запросу
С помощью 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")
При загрузке
Пример того, как использовать 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:
- Сначала убедитесь, что на удаленном компьютере установлен sftp! Ничего не будет работать, пока пакет не будет установлен.
- Затем, попробуйте проверить корректность пути к
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
.
Смотрите также
- sftpman - помощник sshfs
- SSH
- Как монтировать файловую систему SSH, находящуюся в chroot-среде, с специальными владельцами и вопросами доступа.