я использую 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