Как автоматически монтировать удаленный каталог SSHFS при загрузке в Debian

Вы настраиваете монтирование SSHFS, подтверждаете его работоспособность, перезагружаете Debian, и внезапно удаленный каталог снова оказывается пустым. Ручная команда сработала, потому что вы были авторизованы, сеть уже была подключена, и SSH мог запрашивать подтверждение пароля или ключа хоста, если это было необходимо. При загрузке системы эти удобства отсутствуют.

Надежное решение — сделать аутентификацию SSH неинтерактивной, создать постоянную /etc/fstabзапись и сообщить systemd, что файловая система зависит от сети. В этом руководстве сначала рассматривается простейшая рабочая конфигурация, а затем добавляются параметры для медленных сетей и разорванных SSH-сессий. В примерах user@server.example.com:/srv/dataв качестве удаленного каталога используется , а /mnt/remoteв качестве локальной точки монтирования — .

На странице пакетов Debian в настоящее время указана SSHFS 3.7.3 для Debian 12 (Bookworm), и SSHFS использует подсистему SFTP, предоставляемую SSH. См. страницу пакетов SSHFS в Debian и руководство по SSHFS от разработчиков . Версии пакетов различаются в разных версиях Debian, но описанный ниже подход к монтированию при загрузке основан на стандартном поведении fstab и systemd.

Почему монтирование SSHFS вручную работает, но не работает при загрузке?

Большинство сбоев происходит по трем причинам. Во-первых, SSH может по-прежнему требовать пароль, кодовую фразу для ключа или подтверждение ключа хоста при первом подключении. Загрузочная система не имеет терминала, где можно было бы ответить на эти запросы. Во-вторых, монтирование может начаться до того, как сеть или DNS станут полностью работоспособными. В-третьих, длительное SSH-соединение может впоследствии стать неактивным после прерывания сети.

В документации systemd в Debian поясняется, что эта _netdevопция заставляет обрабатывать монтирование как сетевое. Сетевые монтирования располагаются после network-online.target. В той же документации отмечается, что /etc/fstabзаписи преобразуются в собственные единицы монтирования systemd при загрузке. См. systemd.mount(5) в Debian .

1. Установите SSHFS и создайте точку монтирования.

Установите пакетный клиент SSHFS и создайте локальный каталог, который обеспечит доступ к удалённым файлам:

sudo apt update
sudo apt install sshfs
sudo mkdir -p /mnt/remote

SSHFS построена на основе FUSE, интерфейса файловой системы Linux в пользовательском пространстве. В Debian 12 этот sshfsпакет зависит от FUSE 3 и клиента OpenSSH.

В терминале Debian отображаются команды `pt update`, установка SSHFS и создание каталога `/mnt/remote`.
Установите пакет SSHFS и создайте локальный каталог, который станет точкой монтирования.

2. Настройте аутентификацию SSH, которая может выполняться без запроса подтверждения.

Для монтирования в масштабе всей системы, запускаемого systemd, создание выделенного ключа, принадлежащего root, не представляет сложности, поскольку вспомогательная программа монтирования работает от имени root. Генерируйте ключ без парольной фразы только в том случае, если сама машина является доверенной и ключ предназначен исключительно для этой цели:

sudo ssh-keygen -t ed25519 -f /root/.ssh/sshfs_remote
sudo ssh-copy-id -i /root/.ssh/sshfs_remote.pub user@server.example.com

Вторая команда обычно запрашивает пароль удаленной учетной записи один раз. Затем выполняется неинтерактивная проверка подлинности:

sudo ssh -i /root/.ssh/sshfs_remote -o BatchMode=yes user@server.example.com true

Если эта команда завершится успешно без запроса подтверждения, аутентификация готова к загрузке. Если система запросит подтверждение отпечатка сервера, подключитесь один раз в интерактивном режиме от имени root, проверьте отпечаток по доверенному источнику и подтвердите его. Не следует обходить ошибки ключа хоста, отключая проверку хоста.

Документация OpenSSH BatchMode=yesспециально предназначена для скриптов и пакетных заданий, поскольку она отключает запросы пароля и подтверждения. Ключи хоста проверяются по файлу пользователя known_hosts. См. руководство Debian ssh(1) и ssh_config(5) .

В терминале Debian отображается создание SSH-ключа, команда ssh-copy-id и тест подключения SSH в пакетном режиме.
Подготовьте SSH-доступ по ключу и убедитесь, что соединение может быть установлено без интерактивного ввода.

3. Перед редактированием файла fstab вручную подтвердите монтирование SSHFS.

Не отлаживайте порядок загрузки, пока не заработает базовая команда SSHFS. Смонтируйте каталог один раз, используя тот же ключ:

sudo sshfs user@server.example.com:/srv/data /mnt/remote   -o IdentityFile=/root/.ssh/sshfs_remote   -o reconnect   -o ServerAliveInterval=15   -o ServerAliveCountMax=3

Убедитесь, что вы можете получить список удаленных файлов, затем отмонтируйте их и проверьте файл fstab:

ls -la /mnt/remote
sudo fusermount3 -u /mnt/remote

В руководстве по SSHFS, предоставленном разработчиками, рекомендуется reconnectвосстанавливать прерванные соединения. Там также объясняется, что это ServerAliveIntervalможет предотвратить кажущееся зависание монтирования, когда неактивное SSH-соединение незаметно обрывается. При интервале в 15 секунд и значении OpenSSH по умолчанию, равном трем неотвеченным запросам, неработа соединения обнаруживается примерно через 45 секунд; здесь количество указано явно, чтобы поведение было очевидным.

4. Добавьте постоянную запись SSHFS в файл /etc/fstab.

Перед редактированием файла сделайте его резервную копию:

sudo cp /etc/fstab /etc/fstab.backup
sudo nano /etc/fstab

Добавьте одну строку:

user@server.example.com:/srv/data /mnt/remote fuse.sshfs _netdev,IdentityFile=/root/.ssh/sshfs_remote,BatchMode=yes,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,default_permissions 0 0

Этот fuse.sshfsподтип понятен инструментам монтирования Debian. В руководстве по SSHFS от разработчиков также указан sshfsтип файловой системы в fstab и примечания fuse.sshfsдля обеспечения совместимости. В руководстве Debian fstab(5) описаны шесть полей fstab и рекомендуется использовать обозначение подтипа файловой системы, например fuse.sshfs, .

ВариантПочему это здесь?
_netdevЭто заставляет systemd рассматривать точку монтирования как зависящую от сети.
IdentityFile=...Выбирает закрытый ключ явно, вместо того чтобы полагаться на интерактивного агента.
BatchMode=yesВместо ожидания запроса пароля или подтверждения происходит сбой.
reconnectПозволяет SSHFS восстановить разорванное соединение.
ServerAliveInterval=15Отправляет запросы подтверждения соединения на уровне SSH в периоды простоя.
ServerAliveCountMax=3Ограничивает количество неотвеченных запросов подтверждения соединения до разрыва соединения по SSH.
default_permissionsВключает проверку локальных разрешений в дополнение к удаленной авторизации.
Редактор Nano отображает запись SSHFS в файле /etc/fstab с параметрами _netdev, IdentityFile, reconnect и ServerAlive.
Добавьте точку монтирования SSHFS в файл /etc/fstab, указав явно параметры сети, идентификации и переподключения.

5. Проверьте запись в файле fstab перед перезагрузкой.

Опечатку /etc/fstabгораздо проще исправить до перезагрузки. Попросите systemd перезагрузить сгенерированные модули монтирования, а затем проверьте запись:

sudo systemctl daemon-reload
sudo mount -a
findmnt -T /mnt/remote
ls -la /mnt/remote

Если mount -aкоманда не возвращает ошибок и findmntсообщает об ошибке fuse.sshfs, синтаксис fstab принимается, и файловая система монтируется. Руководство Debian по команде mount(8) подтверждает, что mount -aмонтирует файловые системы fstab, за исключением записей, помеченных как noauto.

В терминале Debian отображается вывод команды mount -a, вывод findmnt для /mnt/remote и активный модуль монтирования systemd.
Перед перезагрузкой проверьте запись в файле fstab с помощью команд mount -a, findmnt и сгенерированного systemd модуля монтирования.

Что если сеть не будет готова достаточно скоро?

_netdevЭто обеспечивает systemd правильную семантику порядка выполнения команд, но network-online.targetточность зависит от службы управления сетью, которая её предоставляет. Wi-Fi, VPN, задержки DHCP, задержки DNS и необычные сетевые стеки могут сделать ненадежной мгновенную загрузку с монтирования.

В этом случае используйте автоматическое монтирование systemd, чтобы процесс загрузки создавал точку автоматического монтирования и устанавливал соединение SSHFS только при первом обращении к файлу /mnt/remote. Добавьте x-systemd.automountв параметры:

user@server.example.com:/srv/data /mnt/remote fuse.sshfs _netdev,x-systemd.automount,IdentityFile=/root/.ssh/sshfs_remote,BatchMode=yes,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,default_permissions 0 0

Это часто является лучшим выбором для ноутбуков, систем Wi-Fi или серверов, где удаленный хост может быть иногда недоступен. Это немного меняет семантику: автоматическое монтирование подготавливается во время загрузки, но фактическое SSH-соединение устанавливается при первом доступе. Если приложению абсолютно необходимо подключение к удаленному каталогу до его запуска, сохраните обычное сетевое монтирование и настройте systemd этого приложения так, чтобы он зависел от монтированного каталога.

Вам нужна опция allow_other?

По умолчанию доступ к монтированию FUSE возможен только с правами, связанными с контекстом монтирования. В руководстве по SSHFS описаны allow_otherспособы предоставления доступа другим локальным пользователям. Не добавляйте эту функцию, если служба или другая учетная запись действительно не нуждаются в смонтированных файлах.

Если вы используете FUSE allow_other, /etc/fuse.confсначала изучите его и последствия для безопасности. default_permissionsКак правило, целесообразно использовать его в паре с FUSE, чтобы не пропускать локальные проверки разрешений Unix. В конечном итоге, удаленная учетная запись SSH по-прежнему определяет, какие операции разрешает сервер.

Устранение неполадок, возникающих при загрузке SSHFS.

Крепление ожидает ввода пароля.

Повторите точно такой же неинтерактивный тест с помощью sudo ssh ... -o BatchMode=yes. Если он не пройден, исправьте аутентификацию по открытому ключу, прежде чем трогать systemd. Для ключа, защищенного парольной фразой, также потребуется агент или другой механизм сохранения секрета во время загрузки; обычный монтирование fstab не сможет ввести парольную фразу за вас.

Проверка ключа хоста не удалась.

Не используйте это StrictHostKeyChecking=noкак универсальное решение. Убедитесь, что сервер был пересобран или его ключ хоста был законно изменен. Проверка ключа хоста SSH — это мера безопасности, предотвращающая подмену личности и атаки типа «человек посередине».

Монтирование работает после входа в систему, но не во время загрузки.

Проверьте сгенерированное имя юнита и его журнал. В случае с /mnt/remote, systemd обычно экранирует путь к mnt-remote.mount:

systemctl status mnt-remote.mount
journalctl -b -u mnt-remote.mount

Если вы добавили x-systemd.automount, проверьте также:

systemctl status mnt-remote.automount

Доступ зависает после отключения сервера или сети.

Включены функции Keep reconnectи SSH Keepalive. В руководстве по SSHFS указано, что операции с файловой системой могут блокироваться на неопределенное время, если не обнаружено обрыва соединения. Функция Keepalive ограничивает обнаружение сбоев, но любая операция ввода-вывода, которая выполнялась в момент обрыва соединения, все еще может завершиться неудачей и может потребовать повторной попытки со стороны приложения.

Как убедиться, что монтирование действительно сохраняется после перезагрузки?

После mount -aуспешного завершения перезагрузите компьютер:

sudo reboot

После переподключения выполните следующие проверки:

findmnt -T /mnt/remote
systemctl is-active mnt-remote.mount
ls -la /mnt/remote

Если вы выбрали этот вариант x-systemd.automount, монтируемый блок может быть неактивен до первого доступа. Сначала проверьте автоматическую установку, затем активируйте её с помощью команды ls:

systemctl is-active mnt-remote.automount
ls -la /mnt/remote
findmnt -T /mnt/remote

Успешная настройка характеризуется четырьмя наблюдаемыми свойствами: аутентификация SSH завершается без взаимодействия, запись в fstab проходит проверку mount -a, systemd распознает монтирование как зависящее от сети, и удаленные файлы становятся доступными после чистой перезагрузки. Если хотя бы одна из этих проверок не пройдена, следует устранять неполадки непосредственно на этом уровне, а не добавлять параметры монтирования случайным образом.

Оставить комментарий

Исправление разрывов изображения на графике Intel в Pardus Linux: руководство, ориентированное на результат.

Исправление разрывов изображения на графике Intel в Pardus Linux: руководство, ориентированное на результат.

Для устранения разрывов изображения на экране, вызванных графикой Intel, в Pardus Linux проверьте совместимость X11 и Wayland, настройки композитора, частоту обновления, активный драйвер Xorg и используйте TearFree только при необходимости.

Как настроить межсетевой экран SLES 15 с помощью firewall-cmd

Как настроить межсетевой экран SLES 15 с помощью firewall-cmd

Настройте firewalld на SLES 15: проверьте зоны, разрешите службы или порты, сохраните постоянные правила, безопасно перезагрузите систему и проверьте доступ.

Руководство по настройке оперативного обновления SLES: применение обновлений ядра без перезагрузки.

Руководство по настройке оперативного обновления SLES: применение обновлений ядра без перезагрузки.

Включите функцию автоматического обновления ядра в режиме реального времени на SLES 15 SP7, применяйте поддерживаемые исправления без перезагрузки, проверяйте активные патчи и определяйте, когда все еще требуется перезапуск ядра.

Как включить режим FIPS на сервере SUSE Linux Enterprise Server 15

Как включить режим FIPS на сервере SUSE Linux Enterprise Server 15

Включите режим FIPS на SLES 15 с помощью поддерживаемой SUSE утилиты настройки, безопасно перезагрузите систему, проверьте состояние ядра и криптографической политики, а также проверьте ограничения сертификации.

Как установить Google Chrome на Gooroom OS, не нарушая политики безопасности.

Как установить Google Chrome на Gooroom OS, не нарушая политики безопасности.

Безопасная установка Google Chrome на Gooroom OS с использованием официальных .deb-пакетов, APT-проверки, проверок политик, инструкций по обновлению и исправлений для управляемых устройств.

Как безопасно экспортировать системные журналы SLES на удаленный сервер Syslog

Как безопасно экспортировать системные журналы SLES на удаленный сервер Syslog

Надежная пересылка системных журналов SLES на удаленный сервер syslog с использованием rsyslog, TLS-сертификатов, проверки имен узлов, очередей, валидации и тестирования.

Интеграция Active Directory с SSSD в SLES 15: пошаговое руководство

Интеграция Active Directory с SSSD в SLES 15: пошаговое руководство

Подключите SLES 15 к Active Directory с помощью SSSD, используя YaST. Подготовьте DNS и время, настройте вход в домен, проверьте Kerberos и сравните SSSD, Winbind и realmd.

Fix Realtek RTL8821CE Wi-Fi Driver Issues on Pardus Linux

Fix Realtek RTL8821CE Wi-Fi Driver Issues on Pardus Linux

Fix RTL8821CE Wi-Fi on Pardus Linux by checking the built-in rtw88 driver, Realtek firmware, rfkill, NetworkManager, and safe fallback options.

Исправлена ​​ошибка «Временная ошибка разрешения DNS» в Debian 12 при использовании systemd-resolved.

Исправлена ​​ошибка «Временная ошибка разрешения DNS» в Debian 12 при использовании systemd-resolved.

Диагностика и устранение ошибок разрешения DNS в Debian 12 с помощью systemd-resolved, включая resolv.conf, NetworkManager, networkd, cache и verification.

Как безопасно установить Pardus Linux в паре с Windows 11.

Как безопасно установить Pardus Linux в паре с Windows 11.

Установите Pardus 25.2 рядом с Windows 11, создав резервную копию, уменьшив размер тома Windows, загрузившись с USB-накопителя с поддержкой UEFI и защитив существующие разделы EFI и восстановления.