¿Cómo configuro SSH para no tener que escribir una contraseña y sin usar una clave pública?

9

Sé que aquí hay docenas de preguntas sobre cómo conectarse a un servidor SSH sin tener que escribir su contraseña cada vez , y la respuesta siempre es "usar una clave pública". Bueno, me encuentro en la rara circunstancia en que realmente no es una opción. Por alguna razón inexplicable, el demonio OpenSSH en el servidor al que intento conectarme está configurado con

RSAAuthentication no
PubkeyAuthentication no

en /etc/ssh/sshd_config. No tengo ningún acceso administrativo en el servidor, así que no puedo cambiar estas u otras opciones de configuración del servidor. (Por supuesto, tengo control total sobre la configuración del cliente: OpenSSH 5.8 en Linux).

¿Cuáles son mis opciones y, en particular, cuál es la opción más segura, para evitar tener que escribir mi contraseña cada vez que quiero SSH en este servidor? Mantengo mis propias computadoras bastante bien protegidas, así que supongamos que los riesgos de seguridad de almacenar la contraseña en un archivo en el cliente son aceptablemente bajos, si eso es realmente necesario.

Los otros métodos de autenticación que el servidor puede aceptar son evidentemente la API GSS (de la que no sé nada), el teclado interactivo (del que tampoco sé nada) y la contraseña. Estas son algunas opciones de configuración relevantes:

#ChallengeResponseAuthentication yes

#KerberosAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

#UsePAM no

y aquí hay un -vvseguimiento de depuración ( ):

debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information

debug1: Unspecified GSS failure.  Minor code may provide more information

debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
David Z
fuente
¿El servidor tiene un /etc/krb5.keytab? GSSAPI (Kerberos) puede ser simple de configurar en el lado del cliente; Sin embargo, tendría que pedir el nombre de host del servidor. (También: keyboard-interactivees muy similar a password, no excepto limitado a una "contraseña:" del sistema.)
user1686
@grawity No /etc/krb5.keytab, pero tiene /etc/krb5/krb5.keytab. No tengo acceso a los contenidos. El nombre del servidor es sftp.pass.psu.edu(no creo que haya ningún daño en dar ese nombre) si te ayuda a explicar el procedimiento.
David Z
Aah, el viejo disco de PSU. Qué recuerdos tan agradables. Estaba bastante contento con la autenticación de contraseña. ¿Por qué no le has preguntado a la gente de informática del campus (era CAC cuando fui allí) en lugar de llegar a la red? Quiero decir, vamos, tienen un espejo Debian. No todos son administradores que no tienen ni idea de Windows.
Broam
@Broam No puedo imaginar que sería el primero en preguntar, así que presumiblemente tienen alguna razón para mantenerlo así ... Sin embargo, supongo que no estaría de más intentarlo.
David Z

Respuestas:

3

En este caso, escribir (o grabar mejor) un script esperado sería una de sus opciones.

Cada sistema es diferente, por lo que no habrá un script, pero con Autoexpect es muy fácil grabar un script para este propósito.

johnshen64
fuente
Atrozmente inseguro, pero tenga un voto positivo por ser la respuesta más simple y directa.
Zac B
buen punto. Es mejor que todo esto se realice detrás de un firewall y en una red privada.
johnshen64
8

De la información recopilada hasta el momento, el servidor sftp.pass.psu.eduadmite la autenticación Kerberos 5 (GSSAPI) y está en el dce.psu.edureino.

Kerberos es muy común en redes con muchos servidores y estaciones de trabajo; muchas grandes instituciones educativas lo tienen establecido. Una de sus ventajas sobre la autenticación de clave pública es que una sola kinitproporciona automáticamente credenciales a todas las máquinas en el reino Kerberos, sin tener que copiar las claves públicas a cada una. Otro es el soporte de protocolos: las mismas credenciales de Kerberos se pueden usar con más de 30 protocolos (correo, sistemas de archivos, bases de datos ...), no solo SSH.

(Con respecto a "administradores que no tienen ni idea de Windows": el dce.psu.edureino en realidad parece estar basado en Active Directory y alojado en servidores de Windows).

Intenta seguir estos pasos:

  1. Inicie sesión en Kerberos. (Las herramientas kinity klistpueden estar en "krb5-user" o un paquete similar, si no está incluido con el sistema).

    kinit your_username @ dce.psu.edu
    

    Si no se muestran errores, el inicio de sesión fue exitoso. klistdebe mostrar un " krbtgt/dce.psu.edu@..." elemento.

  2. Ahora conéctese al servidor SSH, con las -vvopciones; si la autenticación tiene éxito, bien.

    Si no es así, es posible que deba editar su /etc/krb5.confarchivo. Debajo de la [domain_realm]sección, agregue lo siguiente:

    [domain_realm]
        .psu.edu = dce.psu.edu
    
  3. Con la configuración predeterminada de Krb5, el boleto obtenido en el n. ° 1 debe ser válido por 10 horas y renovable por hasta una semana. Sin embargo, no tengo forma de verificar la configuración.

    Si desea mantener la contraseña en un archivo, kinit your_principal < password.txtdebería funcionar un simple , aunque no es completamente confiable.

    Con ktutilél es posible hacer un "keytab" para usar en lugar de la contraseña.

    $ ktutil
    ktutil: addent -password -p your_principal -k 1 -e aes256-cts-hmac-sha1-96
    Contraseña para su_principal : *********
    ktutil: wkt keytab_file 
    ktutil:  CtrlD
    

    e inicie sesión con:

    $ kinit -kt keytab_file  your_principal
    
usuario1686
fuente
Parece que debería ser bastante ideal para mí, pero parece que no funciona: pude iniciar sesión con Kerberos con éxito (sin mensajes de error), pero aún así se me solicita una contraseña. Los mensajes de error de ssh -vvson similares a la traza que publiqué, excepto que recibo en debug1: Unspecified GSS failure. Minor code may provide more information\n Server not found in Kerberos databaselugar de lo que sucede con el archivo de caché de credenciales que no se encuentra.
David Z
Ah, parece que los "administradores que no tienen ni idea de Windows" configuraron la tabla de teclas host/sftp.pass.psu.edu, pero su nombre real debería haber sido host/lutz.cac.psu.edu. Puede 128.118.2.85 sftp.pass.psu.edusolucionar esto agregando " " a su / etc / hosts, pero es un poco feo - sería mucho mejor si los administradores arreglaran el servidor ...
user1686
Sí, lo haría ... Les preguntaré al respecto, pero por ahora espero que su solución solucione las cosas. Lo intentaré mañana.
David Z
@DavidZaslavsky: Puede ser útil mencionarles que MIT Krb5 v1.10 admite múltiples principales de host (es decir, ambos host/lutz.cac.psu.edu y host/sftp.pass.psu.edu) en una sola tabla de claves. (Las versiones anteriores solo usaban la primera)
User1686
Lo siento, olvidé volver y proporcionar comentarios sobre esto. Después de modificar /etc/hostssegún lo sugerido me sale debug1: Unspecified GSS failure. Minor code may provide more information Generic error (see e-text). Nada más en la salida es relevante para el error.
David Z
3

Consideraría una solución mixta, donde ingresa la contraseña solo una vez, y la computadora mantiene un socket al servidor SSH remoto. Puede seguir estos pasos para configurarlo ControlMastersolo por ese motivo.

roguesys
fuente
Sin embargo, la conexión maestra se restablecería cuando apague el cliente. Entonces, esta no es una solución ideal, pero sería una ligera mejora con respecto a mi situación actual.
David Z
Utilícelo screenpara evitar que las carcasas se terminen en la conexión interrumpida o colgada.
LawrenceC