5

SSH-сервер моего провайдера (Debian 2.0) выводит меня из системы после 35 минут бездействия при подключении к PuTTY (Windows XP). Это большая проблема, когда я использую сервер для переадресации портов. Окончательные сообщения отображаются в терминале:

This terminal has been idle 30 minutes. If it remains idle
for 5 more minutes it will be logged out by the system.

Logged out by the system.

Варианты шпатлевки, которые не помогают:

  • Отправка пустых пакетов для сохранения активности сессии. Секунды между keepalive (0 для выключения): 30
  • [x] Включить поддержку активности TCP (опция SO_KEEPALIVE)

Есть идеи, как избежать автоматического выхода? Должен ли я попробовать другой SSH-клиент?

4 ответа4

2

Когда вам нужна только переадресация портов, вы можете попробовать вообще отключить запуск оболочки и отключить выделение псевдо-терминала. Тогда терминал больше не может быть бездействующим. :-)

Если ваш провайдер не позволяет этого, вы можете запустить такой скрипт в сеансе оболочки

while sleep 60; do
    echo "Still there"
done

так что терминал показывает активность и не должен выходить из системы.

Но это зависит от операционной системы, которую они используют, какая опция поможет. Вы не сказали нам, не так ли? uname -a твой друг.

1

Какую оболочку вы используете на сервере?

Вы можете попробовать войти без оболочки вообще, выбрав ConnectionSSHDon't start a shell or command at all , или вы можете попробовать запустить другую оболочку и убедиться, что на ней не включена функция автоматического выхода из системы. ,

Например, попробуйте запустить tcsh и убедитесь, что autologout не установлен, выполнив unset autologout .

1

У меня есть простой скрипт AutoHotkey для работы с любым сеансом Telnet/SSH, открытым из Windows. Это может помочь кому-то:

SetTitleMatchMode 2     ; 2 - partially, 3 - exact match
MyWinTitle=- PuTTY      ; Describe the window for keep alive signals
Timeout=180000          ; Call KeepAlive every 180 seconds (180000 ms)

ttl := Timeout / 1000
ToolTip, Keepalives every '%ttl%' seconds for the last touched '%MyWinTitle%' window`nTo stop the keepalive press F12
SetTimer, RemoveToolTip, 3000   ; Shows the tooltip for 5 seconds
return

RemoveToolTip:
    SetTimer, RemoveToolTip, Off    ; only once
    ToolTip
    Gosub, MyKeepAlive
Return

MyKeepAlive:
    WinGetActiveTitle, Title

    IfWinExist, %MyWinTitle%
    {
        WinActivate
        WinGet, mywin_id
        WinGetActiveTitle, mywin_title
        Send {!}{BS}
        MsgBox,,Info message, The window for keep-alives is '%mywin_title%',3
        WinActivate, %Title%
    }
    else
    {
        MsgBox,,Exit message, Open the window first!,10
        ExitApp
    }

    SetTimer, KeepAlive, %Timeout%
    Return

    KeepAlive:
        WinGetActiveTitle, Title
        WinGetTitle, current_title, ahk_id %mywin_id%

        If current_title = %mywin_title%
        {
            WinActivate, ahk_id %mywin_id%
            Send {!}{BS}
            WinActivate, %Title%
        }
        else
        {
            MsgBox,,Exit message, The window was closed!,10
            ExitApp
        }
    Return
Return

F12::ExitApp                ; Exit button
0

Похоже, что сервер принудительно устанавливает тайм-аут на уровне протокола и явно игнорирует нулевые пакеты, часто используемые для поддержания соединения в активном режиме, несмотря на такие тайм-ауты. К сожалению, это означает, что, возможно, вы мало что можете сделать с помощью опций клиента.

Вы можете попытаться организовать что-то в сеансе, чтобы оно постоянно обновлялось, возможно, используя screen и организуя обновление часов в строке состояния, как показано в этом примере. Если это отображение часов не обновляется без ввода пользователя, вы можете вместо этого попытаться разделить сеанс экрана (ctrl+a, ctrl+S), изменить размер очень видимого дополнительного окна (ctrl+a,:resize 2) и получить в нем например, автообновления, например watch -n 10 date .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .