PuTTY / SSH: Como impedir o logout automático?

5

O servidor SSH do meu ISP (Debian 2.0) faz logout após 35 minutos de inatividade, quando conectado ao PuTTY (Windows XP). Este é um grande problema quando utilizo o servidor para encaminhamento de porta. As mensagens finais exibidas no terminal:

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.

Opções PuTTY que fazem não Socorro:

  • Envio de pacotes nulos para manter a sessão ativa. Segundos entre keepalives (0 para desligar): 30
  • [x] Ativar keepalives TCP (opção SO_KEEPALIVE)

Alguma idéia de como evitar o logout automático? Devo tentar outro cliente SSH?

feklee
fonte
... Debian 2.0 ?
grawity

Respostas:

2

Quando você precisar apenas de encaminhamento de porta, poderá tentar desativar o início de um shell e desabilitar a alocação de um pseudo-terminal. Então o terminal não pode mais ficar inativo. :-)

Se o seu ISP não permitir isso, você pode executar um script como este em sua sessão do shell

while sleep 60; do
    echo "Still there"
done

para que o terminal mostre a atividade e não seja desconectado.

Mas isso depende do sistema operacional que eles estão usando, que opção ajudará. Você não nos contou, não é? uname -a é seu amigo.

mihi
fonte
Não alocar um pseudo-terminal parece realmente impedir o auto-logout, pelo menos em um primeiro teste. Obrigado pela solução simples! BTW, eu falei sobre o sistema. Veja minha pergunta.
feklee
1

Qual shell você está usando no servidor?

Você pode tentar efetuar login sem um shell, marcando ConnectionSSHDon't start a shell or command at allou você pode tentar executar um shell diferente e garantir que ele não tenha um recurso de logout automático ativado.

Por exemplo, tente executar tcsh e garantir que autologout não está definido, executando unset autologout.

cnst
fonte
Shell é bash. Não alocar um pseudo-terminal, como sugerido por @mihi, faz o truque.
feklee
1

Eu tenho um script AutoHotkey simples para lidar com qualquer sessão Telnet / SSH aberta no Windows. Pode ajudar alguém:

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
freealx
fonte
0

Parece que o servidor está impondo o tempo limite no nível do protocolo e explicitamente ignorando os pacotes nulos usados ​​com freqüência para manter uma conexão ativa apesar desses tempos limite. Infelizmente isso significa que provavelmente há pouco que você pode fazer através das opções do cliente.

Você poderia tentar organizar algo na sessão para atualizar constantemente, talvez usando screen e organizando para um relógio de atualização para estar na barra de status como visto neste exemplo . Se a exibição do relógio não atualizar sem a entrada do usuário, você pode tentar dividir a sessão de tela (ctrl + a, ctrl + S), redimensionar a janela extra visível muito pequena (ctrl + a,: resize 2) e ter nessa quais atualizações automáticas watch -n 10 date por exemplo.

David Spillett
fonte