Я запустил свой автошоу со временем опроса 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
Но если я физически отсоединяю сетевой кабель, то есть туннель больше не может работать, autossh не убивает демон ssh. Почему? Я понимаю, что autossh не может ничего сделать, если ссылка не работает, но, по моему мнению, он должен попытаться сделать следующее:
- Проверьте дочерний процесс ssh (
check on child ...
) - Проверьте дальний конец !!! (пингоподобная операция через туннель)
- Поймите, что туннель не работает
- Остановить процесс ssh
- Попробуйте снова создать туннель
- Поймите, что это не работает, и установите (экспоненциально увеличивающийся?) Таймер, чтобы проверить снова скоро
Вот почему я запускаю autossh: если что-то происходит с туннелем (будь то программная или аппаратная проблема), он должен попытаться перезапустить его. Вместо этого он просто ждет, когда процесс ssh умрет. Разве он не должен пытаться перезапустить его, даже если нет надежды на восстановление соединения?
Что за проверка делает autossh? Просто убедитесь, что 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
источник
dev tun
оба параметра и настройкиremote
в конфигурации клиента. Единственный раздражающий бит - это управление сертификатами. Мы используем CA «easy-rsa», который поставляется с OpenVPN. Как только у вас есть сертификаты, все остальное легко.Ответы:
autossh запускается на вашем клиентском компьютере, поэтому он не может напрямую уничтожить процесс ssh-демона на сервере. Однако вы можете указать ненулевое значение для
ClientAliveInterval
in/etc/ssh/sshd_config
на сервере (см.man sshd_config
) И перезапустить службу sshd на сервере, чтобы применить изменение конфигурации. Затем в случае отключения сети процесс ssh-демона будет убит черезClientAliveInterval * ClientAliveCountMax
несколько секунд (но не autossh).Теперь, если вы хотели спросить "Почему autossh не убивает процесс ssh-клиента?" Вы указали
-M 0
. Со страницы руководства autossh: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.источник
-M 0
: использовать порт мониторинга нелегко, и это косвенно обескураживает: во многих отношениях это может быть лучшим решением, чем порт мониторинга