Tempo limite de conexão SSH para alcançar a sessão interativa

Tempo limite de conexão SSH para alcançar a sessão interativa

Ao conectar-me a um servidor SSH com comportamento incorreto, existe um sinalizador ou configuração que posso usar para dizer ao cliente para desistir mais cedo se um console interativo não for alcançado em um curto período de tempo?

Estou ciente de -o ConnectTimeoutque cancelará a conexão quando o host estiver inacessível. Nesse caso, o host está acessível e a conexão inicial ocorre rapidamente ("O servidor aceita a chave" em menos de 1s), mas uma falha em alguma camada do PAM significa que posso obter um prompt de comando real em 3 segundos, 12 segundos ou nunca. A conexão é interrompida até que eu envie Ctrl + C ou aguarde 90 segundos para "A conexão com a porta [host] 22 expirou"

Até que a causa subjacente seja corrigida (o que não pretendo resolver com esta questão), há algo que eu possa fazer para atenuar o sintoma? Quero me desconectar automaticamente se não chegarmos a um aviso útil em 5 segundos.

Responder1

Se a conexão subjacente estiver estável e nosso objetivo principal for abrir múltiplas sessões sem jogar roleta PAM, o modo "mestre" pode ajudar:

ssh -M -S /tmp/reusable.sock user@host

Depois de vencer a luta Ctrl + C/tempo limite de 90 segundos pela primeira vez, outros terminais podem ser abertos rapidamente com:

ssh -S /tmp/reusable.sock user@host

Isso funciona desde que a conexão original seja mantida aberta. A redução no tempo de conexão pressupõe que o problema esteja na etapa de autenticação (já que a multiplexação do soquete dessa forma ignora a reautenticação)

Responder2

Se a conexão parar antes que o encaminhamento de porta seja configurado, podemos aproveitar um soquete como semáforo e hackear nosso próprio watchdog:

lfg.sh:

#!/bin/bash
set -m

function watchdog {
    sleep $1
    if [[ ! -S "/tmp/lfg.$2" ]]; then
        kill -STOP $3
    fi
}

ssh -L /tmp/lfg.$$:localhost:1234 $1 && rm -f /tmp/lfg.$$ &
watchdog $2 $$ $! &
fg %-

Uso:

lfg grumpy-host 5

lfgprimeiro habilita o controle do trabalho e, em seguida, inicia ssha solicitação do soquete local /tmp/lfg.nnnencaminhado para uma porta remota arbitrária. Colocando esse trabalho em segundo plano, pedimos à função watchdog que espere 5 segundos e procure o soquete. Se não estiver lá, elimine o processo ssh paralisado. fg %-coloca o ssh de volta em primeiro plano, assim que for interativo, estaremos dentro; se isso demorar mais de 5 segundos, voltaremos ao prompt local.

informação relacionada