Продовження: Схоже, швидка серія відключень, що збігається з декількома місяцями роботи кожного сервера, ймовірно, збігається і просто служить для виявлення фактичної проблеми. Причина, через яку не вдалося відновити зв'язок, майже напевно пояснюється значеннями AliveInterval (відповідь Касперда). Використання параметра ExitOnForwardFailure повинно дозволяти належному виникненню тайм-ауту перед повторним підключенням, що повинно вирішити проблему в більшості випадків. Пропозиція MadHatter (сценарій вбивства), мабуть, найкращий спосіб переконатися, що тунель може знову підключитися, навіть якщо все інше вийде з ладу.
У мене є сервер (A) за брандмауером, який ініціює зворотний тунель на декількох портах до невеликого DigitalOcean VPS (B), щоб я міг підключитися до A через IP-адресу Б. Тунель працював послідовно близько 3 місяців, але раптово вийшов з ладу чотири рази за останні 24 години. Те ж саме трапилося ще раз у іншого постачальника VPS - місяці бездоганної роботи, а потім раптом багато швидких збоїв.
У мене є скрипт на машині A, який автоматично виконує тунельну команду ( ssh -R *:X:localhost:X address_of_B
для кожного порту X), але коли вона виконується, вона каже Warning: remote port forwarding failed for listen port X
.
Заходивши в sshd /var/log/secure
на сервері, показує ці помилки:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
Для вирішення потрібен перезавантаження VPS. До цього часу всі спроби відновити з'єднання дають повідомлення про "віддалене переадресація порту не вдалося" і не спрацюють. Зараз до точки, коли тунель триває лише близько 4 годин до зупинки.
У системі VPS нічого не змінилося, і це одноразова користувальницька машина, яка служить лише кінцевою точкою зворотного тунелю. Він працює OpenSSH_5.3p1 на CentOS 6.5. Здається, що sshd не закриває порти на своєму кінці, коли з'єднання втрачено. Мені не вдається пояснити, чому або чому це раптом станеться зараз через місяці майже ідеальної роботи.
Для уточнення спершу мені потрібно з’ясувати, чому sshd відмовляється слухати порти після виходу з ладу тунелю, що, мабуть, викликано тим, що sshd залишає порти відкритими і ніколи їх не закриває. Це, здається, є основною проблемою. Я просто не впевнений, що може змусити його так поводитися через місяці поведінки, як я очікував (тобто закриваю порти відразу і дозволяю сценарію знову підключатися).