Когда я подключаюсь по ssh к одному из наших офисных серверов (на котором работает Fedora 10) из дома, мой сеанс прерывается после довольно короткого периода активности (5 минут или около того). Я пробовал использовать TcpKeepAlive
на стороне клиента - безрезультатно.
Я не понимаю, что если я нахожусь в офисе в локальной сети компании, я могу оставить сеанс неактивным на весь день без тайм-аута, поэтому поведение, похоже, зависит от моего местоположения.
Есть идеи, почему это происходит и как предотвратить тайм-ауты, когда я не в локальной сети? Я использую клиент терминала в Mac OSX, если это помогает.
ОБНОВИТЬ - Предложение Дэйва Драгера использовать ServerAliveInterval
установить ненулевое значение с TcpKeepAlive=no
работал у меня. Что касается некоторых других ответов, ClientAlive
... настройки не принимаются SSH-клиентом Mac OSX.
Есть хорошая запись об этой проблеме Вот.
Они рекомендуют:
ssh -o TCPKeepAlive=yes
или:
ssh -o TCPKeepAlive=no -o ServerAliveInterval=15
Однако у меня есть проблема на моем рабочем месте, когда я отключаюсь от сеансов, когда дома все в порядке. Я считаю, что мой брандмауэр (SonicWall) может работать неправильно с TCPKeepAlive, возможно, из-за NAT.
В моем SSH-клиенте SecureCRT, к счастью, есть опция протокола «NO-OP», который, как мне кажется, в основном отправляет команду, которая ничего не делает с сервером. Включив это вручную, я могу оставаться на связи. Не уверен, что в терминальном клиенте MacOSX есть что-то подобное. Eсть записать о том, как реализовать "NO-OP" в командной строке.
Наконец, вы можете использовать Wireshark или другой сниффер, чтобы наблюдать за вашим фактическим TCP-соединением, чтобы узнать, что с ним происходит. Это был бы последний способ понять, почему он все еще время от времени отключается.
Я получаю это все время через мое соединение Comcast. Проблема в том, что интервал проверки активности вашего SSH-клиента слишком велик для тайм-аута, настроенного в вашем сетевом пути. Если вы используете Linux, вы можете изменить ServerAliveInterval
и ServerAliveCounter
значения будут ниже значений по умолчанию. Это значение задается в секундах. Общесистемный файл конфигурации находится (обычно) в /etc/ssh/ssh_config
. Установка этих двух И TcpKeepAlive
должно помочь поддерживать связь.
Вероятно, это связано с тем, что когда вы подключаетесь из дома, вы проходите через брандмауэр, который закрывает сеанс TCP через небольшой промежуток времени. Но TcpKeepAlive следует избегать этого. Вы включили TcpKeepAlive на стороне клиента или на стороне сервера?
Как сообщает radius, некоторые межсетевые экраны с полным состоянием «забывают» соединение через определенное (обычно настраиваемое) время и не разрешают дальнейшую связь для соединения; они ожидают, что соединение начнется с TCP SYN (здесь я имею в виду ваше соединение SSH).
Есть еще одна возможность. Сетевой путь между вашим домом и офисом может иметь потери (пакетного типа). Когда вы пытаетесь ввести на SSH-клиенте, если ваша ссылка на какое-то время зависла, клиент может сдаться и потерпеть неудачу.
Конфигурация Keepalive на клиенте обрабатывает первый случай здесь, но не может помочь во втором случае. Брандмауэр обычно находится по периметру вашего офиса, поэтому его можно настраивать. Это также поможет по первому пункту.
Чтобы проверить, есть ли у вас периодические потери связи, вы можете сохранить активный «пинг» в фоновом режиме с вашего клиентского компьютера.
Вы также можете добавить настройки, предложенные другими, по умолчанию в свой ~/.ssh/config
файл, поэтому вам не нужно передавать их ssh
каждый раз, когда вы инициируете соединение:
nano ~/.ssh/config
и добавить:
TCPKeepAlive=no
ServerAliveInterval=15