Добрый день (ночь)!Такая проблема - есть удаленный компьютер (клиент), который цепляется к серверу по ssh (protocol 2). Необходимо, что бы при пропадании связи с клиентом (физически отключили питание у клиента или разорвали линию связи) на СЕРВЕРЕ убивалась сессия ssh с этим клиентом.
На данный момент имеем следующее - отключаем сеть от клиента, сессия на сервере висит более 10 минут (а то и вовсе не дохнет, т.е. "вечно").Игры с sshd_config на сервере TCPKeepAlive, ClientAliveInterval, ClientAliveCountMax в различных комбинациях не решили вопрос. Они отлично работают при ИСПРАВНОЙ (подключенной) сети. Провел такой опыт:
1. установил соединение
2. отключил сетевой кабель на клиенте (сессия ssh при этом на сервере остается жива)
3. убиваю на клиенте сессию ssh
4. подключаю сетевой кабель на клиенте (и вот при этом, в зависимости от параметров ClientAliveInterval, ClientAliveCountMax дохнет сессия на сервере)А хотелось бы, что бы на шаге №2 на сервере дохла ssh сессия с клиентом.
Я конечно могу прикрутить демона на это дело, что бы тот искал "дохлых" клиентов и рубил ssh, но это "костыль". Есть ли в sshd возможность реализации такой схемы?
>[оверквотинг удален]
>остается жива)
>3. убиваю на клиенте сессию ssh
>4. подключаю сетевой кабель на клиенте (и вот при этом, в зависимости
>от параметров ClientAliveInterval, ClientAliveCountMax дохнет сессия на сервере)
>
>А хотелось бы, что бы на шаге №2 на сервере дохла ssh
>сессия с клиентом.
>Я конечно могу прикрутить демона на это дело, что бы тот искал
>"дохлых" клиентов и рубил ssh, но это "костыль". Есть ли в
>sshd возможность реализации такой схемы?офигительно полная информация об экперименте. TCPKeepAlive в том что ты хочешь вообще не причем, а чему были равны ClientAliveInterval и ClientAliveCountMax?
>офигительно полная информация об экперименте.может надо было еще и мое кровяное давление в момент эксперимента указать? А если серьезно, то в мане есть такой пример, вот с него то я и начал:
ClientAliveCountMax ....
The default value is 3. If ClientAliveInterval (see below) is
set to 15, and ClientAliveCountMax is left at the default, unre-
sponsive SSH clients will be disconnected after approximately 45
seconds. This option applies to protocol version 2 only.Вот с этими значениями и пробовал, да и с другими (типа интервал 1 сек. количество 10), т.е. через 10 сек должна была издохнуть сессия. Не дохнут.
При этом если LogLevel выставить в DEBUG3, то в /var/log/debug сыпется что-то вроде этого
===Пока сеть подключена===
Feb 27 18:57:58 server2 sshd[22828]: debug1: Got 100/42 for keepalive
Feb 27 18:58:03 server2 sshd[22828]: debug2: channel 0: request keepalive@openssh.com confirm 1
Feb 27 18:58:03 server2 sshd[22828]: debug1: Got 100/43 for keepalive
===После отключеня сети===
Feb 27 18:58:08 server2 sshd[22828]: debug2: channel 0: request keepalive@openssh.com confirm 1
Feb 27 18:58:43 server2 last message repeated 7 times
Feb 27 18:59:43 server2 last message repeated 12 times
Feb 27 19:00:43 server2 last message repeated 12 times
Feb 27 19:01:34 server2 last message repeated 10 times
===После повторного подключения сети===
Feb 27 19:01:37 server2 sshd[22828]: debug1: Got 100/44 for keepalive
Feb 27 19:01:37 server2 sshd[22828]: debug1: Got 100/45 for keepalive
.... и далее как и в первом фрагменте лога - запрос + ответТ.е. получается, что запросы посылаются с заданным интервалом, ответов от клиента на них нет, а демону на это наплевать, шлет и дальше "до победы".
>TCPKeepAlive в том что ты хочешь вообще не причем.
Это я уже и сам знаю, маны читал. Попробовал на всякий случай (а они разные бывают), а написал, что бы не слали советы типа "прочитай маны про TCPKeepAlive ClientAliveInterval и ClientAliveCountMax". Прочитал. Попробовал.
В предыдущем посте надеялся, что кто-то уже сталкивался с этими граблями, и ему мои логи и эксперименты уже давным давно знакомы. Или может кто повторит такой эксперимент и поделиться результатом. Короче, обновлю OpenSSH, а там поглядим. Может у кого другие соображения имеются?
Все! Вопрос решен и закрыт. Обновил openssh до текущей 5.2 (до этого была 5.0) и все заработало как в мане. Теперь через сколько надо, через столько сессии и дохнут.Всем спасибо.
>>офигительно полная информация об экперименте.
>
>может надо было еще и мое кровяное давление в момент эксперимента указать?ну если только Вы настроили Ваш сервер на реакцию от собственного кровяного давления :)
>[оверквотинг удален]
>
> sponsive SSH clients will be disconnected after approximately 45
>
> seconds. This option applies to protocol version 2 only.
>
>
>Вот с этими значениями и пробовал, да и с другими (типа интервал
>1 сек. количество 10), т.е. через 10 сек должна была издохнуть
>сессия. Не дохнут.
>вот первый лог, что бы вы там в конце данного сообщения не говорили...
а в этом логе значения все значения из начальной темы какие были? Вы же их опять не указали. по хорошему - бы весь конфиг показать...
>[оверквотинг удален]
>===После отключеня сети===
>Feb 27 18:58:08 server2 sshd[22828]: debug2: channel 0: request keepalive@openssh.com confirm 1
>
>Feb 27 18:58:43 server2 last message repeated 7 times
>Feb 27 18:59:43 server2 last message repeated 12 times
>Feb 27 19:00:43 server2 last message repeated 12 times
>Feb 27 19:01:34 server2 last message repeated 10 times
>===После повторного подключения сети===
>Feb 27 19:01:37 server2 sshd[22828]: debug1: Got 100/44 for keepalive
>Feb 27 19:01:37 server2 sshd[22828]: debug1: Got 100/45 for keepaliveинтересно. а не пробовали смотреть куда эти пакеты от сервера идут после отключения клиента?
>.... и далее как и в первом фрагменте лога - запрос +
>ответ
>
>Т.е. получается, что запросы посылаются с заданным интервалом, ответов от клиента на
>них нет, а демону на это наплевать, шлет и дальше "до
>победы".
>не до победы, а до восстановления tcp/ip соединения. что очень интерестно. Got 100/45.. наводит на размышления о том, что надо бы сырцы этой версии скачать и оттуда доки почитать.
>>TCPKeepAlive в том что ты хочешь вообще не причем.
>
>Это я уже и сам знаю, маны читал. Попробовал на всякий случай
>(а они разные бывают), а написал, что бы не слали советы
>типа "прочитай маны про TCPKeepAlive ClientAliveInterval и ClientAliveCountMax". Прочитал. Попробовал.
>
>В предыдущем посте надеялся, что кто-то уже сталкивался с этими граблями, и
>ему мои логи и эксперименты уже давным давно знакомы. Или может
>кто повторит такой эксперимент и поделиться результатом. Короче, обновлю OpenSSH, а
>там поглядим. Может у кого другие соображения имеются?так Вы не дали ничего: ни логов, ни конфигов, ни настроек, с которыми лог эксперимента выложили...
ни ОС клиента и сервера, ни версию ssh под сервером и клиентом. ни по какому протоколу соединялись...PS ну заработало и слава богу
>интересно. а не пробовали смотреть куда эти пакеты от сервера идут после
>отключения клиента?Тогда не догадался, а теперь уже поздно откатывать назад. Машина "боевая". Меня народ просто не поймет.
>не до победы, а до восстановления tcp/ip соединения. что очень интерестно. Got
>100/45.. наводит на размышления о том, что надо бы сырцы этой
>версии скачать и оттуда доки почитать.Полностью с Вами согласен, я по началу в сырцы и полез глянуть, где там таймаут крутиться. А потом вспомнил что Патрик (у меня Slackware 12.1) обычно не торопиться обновлять пакеты в релизе. И решил для начала поновее openssh взять. А для версии 5.0 оказывается на эту проблему патч есть (в баг репортс нашел у них такое).
>так Вы не дали ничего: ни логов, ни конфигов, ни настроек, с
>которыми лог эксперимента выложили...
>ни ОС клиента и сервера, ни версию ssh под сервером и клиентом.виноват, следующий раз исправлюсь. А он обязательно будет, я в этом деле оптимист :-)
>PS ну заработало и слава богу
Спасибо, LS, за помощь и внимание к моей проблеме.