Tiempo de espera de conexión SSH para llegar a la sesión interactiva

Tiempo de espera de conexión SSH para llegar a la sesión interactiva

Al conectarme a un servidor SSH que se comporta mal, ¿hay algún indicador o configuración que pueda usar para indicarle al cliente que se dé por vencido antes si no se accede a una consola interactiva en un corto período de tiempo?

Soy consciente de -o ConnectTimeoutque se cancelará la conexión cuando el host sea inalcanzable. En este caso, se puede acceder al host y la conexión inicial se produce rápidamente ("El servidor acepta la clave" en menos de 1 segundo), pero luego una falla en alguna capa de PAM significa que puedo obtener un símbolo del sistema real en 3 segundos, 12 segundos o nunca. La conexión se detiene hasta que envío Ctrl+C o espero 90 segundos hasta que "Se agotó el tiempo de espera de la conexión al puerto 22 [host]"

Hasta que se solucione la causa subyacente (que no busco resolver con esta pregunta), ¿hay algo que pueda hacer para mitigar el síntoma? Quiero desconectarme automáticamente si no llegamos a un mensaje útil en 5 segundos.

Respuesta1

Si la conexión subyacente es estable y nuestro objetivo principal es abrir varias sesiones sin jugar a la ruleta PAM, el modo "maestro" puede ayudar:

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

Una vez que ganes la pelea Ctrl+C/tiempo de espera de 90 segundos por primera vez, se pueden abrir otras terminales rápidamente con:

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

Esto funciona siempre que la conexión original se mantenga abierta. La reducción en el tiempo de conexión supone que el problema está en el paso de autenticación (ya que al multiplexar el socket de esta manera se omite la nueva autenticación)

Respuesta2

Si la conexión se detiene antes de que se configure el reenvío de puertos, podemos aprovechar un socket como semáforo y crear nuestro propio sistema de vigilancia:

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

lfgprimero habilita el control del trabajo, luego inicia sshla solicitud de socket local /tmp/lfg.nnnreenviado a un puerto remoto arbitrario. Al poner este trabajo en segundo plano, le pedimos a la función de vigilancia que espere 5 segundos y luego busque el socket. Si no está allí, finalice el proceso ssh estancado. fg %-vuelve a poner ssh en primer plano, de modo que tan pronto como sea interactivo, estaremos dentro; si eso demora más de 5 segundos, regresaremos a nuestro indicador local.

información relacionada