Я пытаюсь закодировать shell-скрипт, который использует ssh-соединение для выполнения "heartbeats". Я хочу прекратить клиентское и серверное соединение после определенного тайм-аута (после разрыва соединения).
Что я нашел до сих пор:
- TCPKeepAlive да / нет для ssh и sshd
- ClientAliveCountMax для sshd
- ClientAliveInterval для sshd
- ServerAliveCountMax для SSH
- ServerAliveInterval для SSH
Чтобы изменить «ClientAliveCountMax», мне нужно изменить sshd_config на каждой целевой машине (эта опция по умолчанию отключена).
Итак, мой вопрос - могу ли я использовать «TCPKeepAlive» также для своих целей (не изменяя что-либо еще на исходных / целевых машинах)?
Целевой операционной системой является SLES11 SP2 - но я не думаю, что это уместно здесь.
ControlMaster
опцию и используете подчиненные соединения?Ответы:
Вы, вероятно, хотите использовать настройки ServerAlive для этого. Они не требуют какой-либо настройки на сервере и могут быть установлены в командной строке, если хотите.
Это будет отправлять сообщение ssh keepalive каждые 5 секунд, и если придет время отправить еще один keepalive, но ответ на последний ответ не был получен, то соединение разрывается.
Критическая разница между
ServerAliveInterval
иTCPKeepAlive
представляет собой слой , они работают на.TCPKeepAlive
работает на уровне TCP. Он отправляет пустой пакет TCP ACK. Межсетевые экраны можно настроить так, чтобы они игнорировали эти пакеты, поэтому, если вы проходите через межсетевой экран, который сбрасывает незанятые соединения, они могут не поддерживать соединение живым.ServerAliveInterval
работает на слое ssh. На самом деле он будет отправлять данные через ssh, поэтому TCP-пакет содержит зашифрованные данные, и брандмауэр не может определить, является ли он активным или легитимным пакетом, поэтому они работают лучше.источник
Seconds between keepalives
на 1800 в Настройки | Подключение.Эта
TCPKeepAlive
опция на самом деле является совершенно другим методом поддержания соединений по сравнению с параметрами ClientAlive или ServerAlive.На странице руководства BSD SSH , мы можем прочитать, что:
TCPKeepAlive
Убедиться , должна ли система посылать TCP оставайся в живых сообщения на другую сторону. Опция по умолчанию всегда включена.Если вы используете
ClientAliveInterval
, вы можете отключитьTCPKeepAlive
. Эта опция отправляет сообщение через зашифрованный канал для запроса ответа от клиента (по умолчанию 0, поэтому сообщения не отправляются клиенту) иClientAliveCountMax
устанавливает количество живых сообщений клиента до того, как sshd отключит клиент, завершив сессия.источник