SSHFS-кріплення, яке витримає відключення


56

Я використовую SSHFS- кріплення від свого ноутбука до центрального сервера.

Очевидно, що кріплення SSHFS порушено після більш тривалого відключення (наприклад, під час призупинення), що спричинило вимкнення базового з'єднання SSH.

Чи є спосіб отримати кріплення SSHFS, що витримають тривалі відключення (> 5 хв) або навіть повторний комутатор з іншим IP?

Відповіді:


62

Використовуйте -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Поєднання ServerAliveInterval=15,ServerAliveCountMax=3призводить до появи помилок вводу / виводу після однієї хвилини відключення мережі. Це важливо, але багато в чому недокументовано. Якщо ServerAliveIntervalопцію залишити за замовчуванням (так що без активної перевірки), процеси, які перебувають у вивісі вводу / виводу, схоже сплять нескінченно, навіть після отримання sshfs reconnect'ed. Я вважаю це марною поведінкою.

Іншими словами, те, що відбувається -o reconnectбез присвоєння, ServerAliveInterval- це те, що будь-який ввід / вивід буде або успішним, або повісити додаток на невизначений термін, якщо ssh знову підключиться під ним. Типовий додаток стає цілком повішеним. Якщо ви хочете дозволити вводу / виводу повернути помилку та відновити програму, вам потрібно ServerAliveInterval=1або більше.

Значення ServerAliveCountMax=3за замовчуванням все-таки є, але я хотів би вказати його на читабельність.


Це зробило це для мене. Крім того, ви можете використовувати коротший інтервал, afaik він не повинен створювати зайвих проблем і робить все це більш чуйним.
Манукс

Я не читав документи, але побачив ще одне рішення: "ServerAliveCountMax = 0" означає, що воно буде намагатися нескінченно. Я припускаю, що ваше рішення дає 3 спроби після кожної відмови?
PJ Brunet

@PJBrunet man 5 ssh_configдля отримання більш детальної інформації, але суть полягає в тому, що кожні 15 секунд ssh надсилатиме щось на кшталт "підтримання життя" пінг кожні 15 секунд, щоб переконатися, що комп'ютери все ще реагують один на одного. Якщо три послідовні пінгви провалюються (45 секунд), підключіться знову.
Wyatt8740

@ Wyatt8740 Я вивчав це більше і читав документацію, я вважаю, ServerAliveCountMax=3має інше значення. Якщо стався збій, він спробує знову підключитися ще 3 рази, а потім відмовиться. У якийсь момент повторне спробу виявляється марним, але це залежить від програми. Знову ж таки, я думаю, що сторінка man може бути більш конкретною, існують різні способи інтерпретації способу, що її формулює IMO. FWIW моя конкретна проблема пішла після переходу на ProtonVPN. Я думаю, що також варто перевірити конфігурацію ssh на клієнті та сервері, у них є окремі варіанти, тому все, що вам дійсно потрібно,-o reconnect
PJ Brunet

1
Це має бути прийнятою відповіддю.
Fl0v0

52

Дякуємо за поради щодо autossh та autofs.

Однак для моєї прямої мети я знайшов набагато простіше рішення, яке було не так добре зафіксовано:

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

Солодке! Це змушує мене дійсно розібратися з аутентифікацією під час запису: serverfault.com/q/379728/96905
Джефф

12

Autossh автоматично відновлює сеанси ssh, коли помічає, що ssh загинуло або перестало пропускати трафік. Оскільки це просто автоматизований ssh, він буде працювати з різних IP-адрес і від призупинення (навіть якщо ноутбук прокидається на іншому ланцюзі).


Можливо, Mosh навіть краще для інтерактивного сеансу SSH.
Мартін Удінг

@MartinUeding Я шукав Mosh, але а) не працює з sshfs.
PJ Brunet

9

Одне, що можна зробити, - це змонтувати файлові системи за допомогою автофайлів . Autofs - це інструмент, який змонтує файлову систему при використанні чогось у каталозі, до якого буде змонтована файлова система. Коли він виявляє активність, монтується файлова система. Коли у файловій системі нічого не відбувається, її відключають.

Ось HOWTO я знайшов на Google , щоб зробити це, там , де кілька інших.


2

Я підозрюю, що цього немає, тому що навіть якщо ви можете налаштувати ваш клієнт SSH так, щоб він не передавав з'єднання, сервер може бути налаштований так, щоб це було зроблено після визначеного періоду бездіяльності, і ви не зможете це змінити. Навіть якщо ви зможете, якщо ви ніколи не відновите з’єднання, сервер буде залишений висить, і з часом це може призвести до значної трати ресурсів сервера.

Кращою технікою, я думаю, є відключення файлової системи перед тим, як призупинити роботу комп'ютера та перезавантажити його, коли комп'ютер знову прокинеться. Механізм цього може залежати від того, як саме ви призупиняєте ваш комп'ютер - я використовую ядро ​​tuxonice і щоб зробити щось подібне, у мене є директива, як

Unmount /mnt/sshfs

в /etc/hibernate/common.conf.


0

Відповідь kubanczyk великий. У мене виникла проблема із заморожуванням всього інтерфейсу через занадто жадібний 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.