использование -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
Комбинация ServerAliveInterval=15,ServerAliveCountMax=3
вызывает появление ошибок ввода-вывода после одной минуты простоя сети. Это важно, но в основном без документов. Если ServerAliveInterval
опция оставлена по умолчанию (то есть без проверки живого состояния), процессы, которые испытывают зависание ввода-вывода, кажутся спящими бесконечно, даже после того, как sshfs получает reconnect
'ed'. Я считаю это бесполезным поведением.
Другими словами, то, что происходит -o reconnect
без назначения, ServerAliveInterval
заключается в том, что любой ввод-вывод будет либо успешным, либо зависнет на неопределенное время, если ssh переподключится внизу. Типичное приложение становится полностью зависшим в результате. Если вы хотите разрешить I / O вернуть ошибку и возобновить приложение, вам нужно ServerAliveInterval=1
или больше.
В ServerAliveCountMax=3
любом случае это значение по умолчанию, но мне нравится указывать его для удобства чтения.
man 5 ssh_config
для более подробной информации, но суть в том, что каждые 15 секунд ssh будет отправлять пинг «keep-alive» каждые 15 секунд, чтобы убедиться, что компьютеры все еще реагируют друг на друга. Если три последовательных эхо-запроса не выполняются (45 секунд), восстановите соединение.ServerAliveCountMax=3
что это имеет другое значение. Если произошел сбой, он попытается подключиться еще 3 раза и затем сдастся. В какой-то момент повторная попытка бесполезна, но это зависит от применения. Опять же, я думаю, что справочная страница может быть более конкретной, есть разные способы интерпретации того, как она сформулирована в IMO. FWIW моя конкретная проблема ушла после перехода на ProtonVPN. Я думаю, что также стоит проверить конфигурацию ssh на клиенте и сервере, у них есть отдельные опции, так что все, что вам действительно нужно,-o reconnect
Спасибо за советы autossh и autofs.
Однако для моей непосредственной цели я нашел гораздо более простое решение, которое не было так хорошо задокументировано:
источник
Autossh автоматически переподключается к сеансам ssh, когда обнаруживает, что ssh умер или прекратил пропускать трафик. Так как это просто автоматизированный ssh, он будет работать с разных IP-адресов и с приостановки (даже если ноутбук просыпается на другой локальной сети).
источник
Одна вещь, которую вы могли бы сделать, это монтировать ваши файловые системы через autofs . Autofs - это инструмент, который монтирует файловую систему, когда вы используете что-то в каталоге, в который будет монтироваться файловая система. Когда он обнаруживает активность, файловая система монтируется. Когда в файловой системе ничего не происходит, она отключается.
Вот HOWTO я нашел на Google , чтобы достигнуть этого, там , где несколько других.
источник
Я подозреваю, что нет, потому что даже если вы можете настроить свой SSH-клиент так, чтобы он не прерывал соединение, сервер может быть настроен на это после определенного периода бездействия, и вы не сможете переопределить это. Даже если бы вы могли, если вы никогда не возобновите соединение, сервер останется зависшим, и со временем это может привести к значительному расходу ресурсов сервера.
Я думаю, что более эффективный способ - отключить файловую систему перед тем, как приостановить работу компьютера, и перемонтировать ее, когда компьютер снова проснется. Механизм для этого может зависеть от того, как именно вы зависаете на своем компьютере - я использую ядро tuxonice, и чтобы сделать что-то подобное, у меня есть такая директива, как
в
/etc/hibernate/common.conf
.источник
Ответ kubanczyk велик. У меня была проблема с зависанием всего интерфейса из-за слишком жадных sshfs, теперь для легкого соединения, запускаемого скриптом, который переподключается при открытии ноутбука, и который не зависает при замедлении соединения, вы можете использовать скрипт bash вот так (возможно не очень безопасный, но удобный для многих веб-проектов, например):
источник