autossh не вбиває ssh при посиланні


10

Я розпочав свій аутосш із допиткою 30 с:

AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1

І це добре працює:

Sep  5 12:26:44 serverA autossh[20935]: check on child 23084
Sep  5 12:26:44 serverA autossh[20935]: set alarm for 30 secs

Але якщо я фізично видаляю мережевий кабель, тобто тунель більше не може працювати, автошшш не вбиває демона ssh. Чому? Я розумію, що autossh не може нічого зробити, якщо посилання не працює, але, на мою думку, слід спробувати зробити наступне:

  1. Перевірте дочірню процедуру ssh ( check on child ...)
  2. Перевірте дальність кінця !!! (операція, що нагадує пінг через тунель)
  3. Зрозумійте, що тунель вниз
  4. Зупинити процес ssh
  5. Спробуйте створити тунель ще раз
  6. Зрозумійте, що він не працює, і встановіть (експоненціально зростаючий?) Таймер, щоб незабаром знову перевірити

Ось чому я запускаю autossh: якщо щось трапиться з тунелем (будь то проблема з програмним чи апаратним забезпеченням), слід спробувати його перезапустити. Натомість він просто чекає, коли загине процес ssh. Чи не слід намагатися перезапустити його, навіть якщо немає надії відновити з'єднання?

Яка перевірка робить автошшш? Просто переконайтеся, що ssh запущено? Хіба це не робить якісь далекобійні перевірки?

Редагувати

Як вимагається, я додаю відповідну частину конфігурації ssh:

# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
#   that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
#   be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
#   be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
#   specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60

TCPKeepAlive yes

як щодо спроби скоротити тайм-аут?
Ніколаїдіс Фотіс

Ми використовували autossh деякий час, але це було занадто ненадійно в пластових з'єднаннях, зокрема в поєднанні з переадресацією портів. Зараз ми використовуємо OpenVPN і дуже задоволені цим.
Нільс Тодтманн

@NikolaidisFotis: час очікування прекрасний. Це ... вичерпання часу. Але це не робить правильно (імхо) кожного разу, коли починається тайм-аут, а саме: перевірка дальнього кінця !
dangonfast

@NilsToedtmann: дякую, я спробую. Це легко здійснити? Чи є у вас якесь посилання на хороший хауд?
dangonfast

OpenVPN досить простий, ми просто "apt-get install'ed it" та розпочали з конфігурацій за замовчуванням для сервера чи клієнта, використовуючи dev tunв обох і налаштування remoteв клієнтській конфігурації. Єдиний дратівливий біт - це управління сертифікатами. Ми використовуємо «easy-rsa» CA, що постачається з OpenVPN. Після отримання сертифікатів, решта легко.
Нільс Тодтманн

Відповіді:


11

Але якщо я фізично видаляю мережевий кабель, тобто тунель більше не може працювати, автошшш не вбиває демона ssh. Чому?

autossh працює на вашій клієнтській машині, тому він не може безпосередньо вбити процес ssh daemon на сервері. Тим НЕ менше, ви можете вказати нульове значення для ClientAliveIntervalв /etc/ssh/sshd_configна сервері (см man sshd_config) і перезапустити службу Sshd на сервері , щоб застосувати зміни конфігурації. Тоді, у випадку відключення мережі, процес демона ssh буде вбитий через ClientAliveInterval * ClientAliveCountMaxсекунди (але не за допомогою autossh).

Тепер, якщо ви хотіли запитати "Чому autossh не вбиває процес клієнта ssh?" , Ви вказали -M 0. Зі сторінки автовідкладу:

Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit.

Замість того, щоб використовувати autossh для моніторингу з'єднання, ви чекаєте, коли ssh завершиться через тайм-аут ServerAliveCountInterval * ServerAliveCountMaxсекунд. Ви попросили 60 перевірок на сервері, перш ніж вийти з ssh, з інтервалом 60 секунд, який розділяє послідовні перевірки, тому ви будете чекати годину до виходу вашого ssh-клієнта.

Ви також можете скористатися ExitOnForwardFailureпараметром на стороні клієнта (див. man ssh_config), Щоб ssh вийшов, якщо він не зможе встановити тунель, а потім autossh може спробувати запустити ssh ще раз.


Дякую, це має сенс. Я дійсно мав на увазі "клієнтський процес", а не серверний процес.
dangonfast

І після того, як перечитав сторінку автовіддачі, тепер я пам’ятаю, чому я встановив -M 0: використовувати моніторинговий порт непросто, і це побічно не
відсторонено
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.