it-swarm-ru.tech

Монтирование SSHFS, которое переживает разрыв соединения

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

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

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

60
bene

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

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

sshfs -o reconnect server:/path/to/mount
54
bene

Используйте -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

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

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

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

65
kubanczyk

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

12
kband

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

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

9
Zoredache

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

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

Unmount /mnt/sshfs

в /etc/hibernate/common.conf.

2
David Z

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

#!/bin/bash
echo PWD | sshfs [email protected]:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
1
Timofey Bugaevsky