У меня есть небольшая локальная сеть, которая использует встроенный WiFi, и я использую ssh
в OS X с -oServerAliveInterval=240
PuTTY 0.62 в Windows 7 Professional для установления соединений с моим Linode, Hetzner и другими серверами.
С помощью PuTTY я выбираю Connection
→ Sending of null packets to keep session active
до 240. По Enable TCP keepalives (SO_KEEPALIVE option)
умолчанию он выключен.
Когда мой интернет временно не работает в течение приблизительно одной минуты (необходимо пройти повторную аутентификацию на портале авторизации), PuTTY почти всегда теряет все открытые сеансы SSH, которые у меня есть, и особенно те, где были какие-либо действия, но OpenSSH на OS X никогда не теряет ни одной сессии, пока мой интернет работает в течение примерно минуты или двух, даже если я на самом деле пытаюсь что-то набрать в ssh и не вижу ответа целых 60 секунд или около того, пока мое соединение снова не станет активным. (Так что я точно знаю, что состояния NAT всегда сохраняются.)
Могу ли я остановить Windows / PuTTY от упреждающего отказа от хороших соединений?
Мне кажется, что SO_KEEPALIVE или что-то подобное на самом деле включено в Windows по умолчанию, и время ожидания для обнаружения устаревших соединений слишком мало. Я хотел бы увеличить его до нескольких секунд, аналогично тому, как OS X защищена от этих кратковременных временных отключений, если сбой составляет всего пару сотен секунд и ниже значения -oServerAliveInterval
(раз ServerAliveCountMax
).
mosh
это лучшая альтернатива.)Ответы:
http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-timeout
Кажется, что
TcpMaxDataRetransmissions
(REG_DWORD) напрямую влияет на это. Значение может быть добавлено сHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
помощьюregedit.exe
(ключ отсутствует по умолчанию, поэтому сначала нужно добавить его, чтобы изменить его). Когда не установлено - это 5. Добавьте его, и установите его как минимум наf
(15), и перезагрузите компьютер.Значение по умолчанию 5 кажется совершенно неадекватным для поддержания соединений во время кратковременных и временных отключений сети; Вы получите тайм-аут в течение нескольких секунд. Я добавил этот
TcpMaxDataRetransmissions
ключ в реестр и установил его значениеf
(15), перезагрузил компьютер и, выполнивsysctl net.inet.ip.forwarding=0
на маршрутизаторе прямо перед вводом символа в PuTTY, вернул мне этот символ после включения переадресации на моем маршрутизаторе после ожидания 5 минут (я проверил его, чтобы определить, что значение 0x0000000c (12) разрывает соединение ровно через 7 минут после первой попытки отправки пакета во время сбоя). Перед перезагрузкой PuTTY сразу же отключит соединение в течение нескольких секунд. Обратите внимание, что требуется перезагрузка - по крайней мере, в Windows 7 Professional,простое изменение реестра не влияет ни на существующие, ни на новые подключения ! В Windows ничего не меняется!В то время как у него, мог бы также добавить и набор
KeepAliveInterval
в60000
десятичной системе (60 сек) с отключенном значение по умолчанию1000
(1 сек), но это не должно иметь никакого эффекта в моем конкретном случае , как указано выше, так как TCP поддержку активности не были включены.источник