Сколько раз уж бывало так, что сидишь на удалённом сервере, залогинившись по SSH, никого не трогаешь. Потом отвлечешься ненадолго (ну… пообедать там, новости почитать, Симпсонов посмотреть), смотришь в консоль, а сессия отвалилась. Вроде и не смертельно, вроде и секьюрно. В общем, не задумывался об этом и просто залогинивался по-новой. Сегодня, однако, задумался – в какой бы конфиг и какую бы строчку забабахать, чтобы этого не происходило. Гугл и man sshd_config в помощь. В общем, нашёл способ. И не один.

Способ 1

На стороне клиента пишем в ssh_config строку:

ServerAliveInterval 60
ServerAliveCountMax 10

Так мы задаём необходимость клиенту раз в 60 секунд посылать пакеты keep-alive на сервер. И если после 10 посылок сервер так ничего и не отвечает, то отключиться. Работает только в SSHv2.

Кстати, эти же строки можно прописать не для всех в #root etc/ssh/ssh_config, а в файле ~/.ssh/config для конкретного пользователя.

Способ 2

На стороне сервера прописываем в sshd_config:

ClientAliveInterval 60
ClientAliveCountMax 10

На этот раз сервер sshd будет раз в минуту слать пакеты keep-alive клиенту. Если клиент будет активен, то сессия разрываться также не будет. Сессия разорвется только когда клиент 10 раз не ответит на посланный keep-alive.

Само собой, надо не забыть про /etc/init.d/sshd reload

Способ 3

Если не хочется менять конфиг, то можно поменять параметры для конкретного соединения. Для этого выполняем команду ssh с ключом -o:

ssh -o ServerAliveInterval=60

Поделитесь со своими друзьями!

Опубликовать в Одноклассники
Опубликовать в Мой Мир
Опубликовать в Яндекс
Опубликовать в Google Plus
Опубликовать в Google Buzz
Опубликовать в LiveJournal