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 ConnectTimeout
que 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
lfg
primeiro habilita o controle do trabalho e, em seguida, inicia ssh
a solicitação do soquete local /tmp/lfg.nnn
encaminhado 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.