Назад | Перейти на главную страницу

Крепление SSHFS, которое выживает после отключения

я использую SSHFS монтируется с моего ноутбука на центральный сервер.

Очевидно, что монтирование SSHFS прерывается после длительного отключения (например, во время приостановки), что приводит к истечению времени ожидания основного SSH-соединения.

Есть ли способ заставить монтировки SSHFS выдерживать длительные отключения (> 5 минут) или даже повторный набор с другим IP?

Использовать -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Комбинация ServerAliveInterval=15,ServerAliveCountMax=3 вызывает появление ошибок ввода-вывода после одной минуты сбоя сети. Это важно, но в значительной степени недокументировано. Если ServerAliveInterval параметр оставлен по умолчанию (так что без проверки активности), процессы, которые испытывают зависание ввода-вывода, кажутся спящими на неопределенный срок, даже после того, как sshfs получает reconnectизд. Я считаю это бесполезным поведением.

Другими словами, что происходит на -o reconnect без назначения ServerAliveInterval заключается в том, что любой ввод-вывод либо завершится успешно, либо приложение зависнет на неопределенное время, если ssh повторно подключится снизу. В результате типичное приложение полностью зависает. Если вы хотите, чтобы I / O возвращал ошибку и возобновлял работу приложения, вам необходимо ServerAliveInterval=1 или выше.

В ServerAliveCountMax=3 в любом случае используется по умолчанию, но я предпочитаю указывать его для удобства чтения.

Спасибо за советы autossh и autofs.

Однако для моей прямой цели я нашел гораздо более простое решение, которое не было так хорошо документировано:

sshfs -о переподключить server:/path/to/mount

Autossh автоматически повторно подключает сеансы ssh, когда замечает, что ssh умер или прекратил передачу трафика. Поскольку это просто автоматический ssh, он будет работать с разных IP-адресов и в режиме ожидания (даже если ноутбук просыпается в другой локальной сети).

Вы можете смонтировать файловые системы через autofs. Autofs - это инструмент, который монтирует файловую систему, когда вы используете что-то в каталоге, в который будет монтироваться файловая система. Когда он обнаруживает активность, файловая система монтируется. Когда в файловой системе ничего не происходит, она отключена.

Вот как Я нашел в Google, чтобы сделать это, там было несколько других.

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

Я думаю, что лучший способ - размонтировать файловую систему перед приостановкой компьютера и повторно подключить ее, когда компьютер снова проснется. Механизм для этого может зависеть от того, как именно вы приостанавливаете работу своего компьютера - я использую ядро ​​tuxonice, и чтобы сделать что-то подобное, у меня есть директива вроде

Unmount /mnt/sshfs

в /etc/hibernate/common.conf.

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

#!/bin/bash
echo PWD | sshfs USER@SERVER:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi