Autenticación SSH usando gssapi-keyex o gssapi-with-mic (no se permite la clave pública)

15

Mi empresa ha deshabilitado la autenticación de clave pública SSH, por lo tanto, tengo que ingresar manualmente cada vez que ingrese mi contraseña (no se supone que deba cambiarla /etc/ssh/sshd_config).

Sin embargo gssapi-keyex, y gssapi-with-micautenticaciones están habilitados (por favor ver más abajo sshla salida de depuración).

¿Cómo podría usar el inicio de sesión automático en este caso?
¿Puedo explotar gssapi-keyexy / o gssapi-with-micautenticaciones?

> ssh -v -o PreferredAuthentications=publickey hostxx.domainxx
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to hostxx.domainxx [11.22.33.44] port 22.
debug1: Connection established.
debug1: identity file /home/me/.ssh/identity type -1
debug1: identity file /home/me/.ssh/id_rsa type -1
debug1: identity file /home/me/.ssh/id_dsa type 2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'hostxx.domainxx' is known and matches the RSA host key.
debug1: Found key in /home/me/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: gssapi-keyex,gssapi-with-mic,password
debug1: No more authentication methods to try.
Permission denied (gssapi-keyex,gssapi-with-mic,password).
olibre
fuente
1
La tela de Python hace un gran trabajo al tratar con la automatización ssh.
Dan Garthwaite
Hola @DanGarthwaite ¿Utiliza Fabric para iniciar sesión manualmente en otros servidores remotos? Por favor, ¿puedes explicar cómo lo usas? Por favor proporcione una respuesta. Saludos
olibre
3
Si no está en un reino Kerberos (o dominio de Active Directory), es poco probable que GSSAPI sea útil para usted. Dicho esto, deshabilitar la autenticación de clave pública parece bastante absurdo.
Michael Hampton
1
@olibre Fabric es una utilidad para ejecutar comandos en uno o más servidores a través de SSH. Estos comandos generalmente se organizan en un "fabfile", como un Makefile. Hace un trabajo extremadamente bueno al hacer desaparecer SSH (una vez que se autentica) y maneja todas las formas en que los clientes y servidores SSH tienden a interrumpir el control. Un tutorial rápido está disponible: docs.fabfile.org/en/1.7/tutorial.html
Dan Garthwaite
@DanGarthwaite, ¿podría dar un ejemplo de un fabarchivo que iniciaría sesión en otra máquina (SSH gssapi sin solicitar una contraseña) y abrir un shell? Puede proporcionarlo dentro de una respuesta. (En cinco minutos, no encontré en el tutorial cómo hacerlo). Cheers;)
olibre

Respuestas:

19

Tal vez.

  • ¿Puede obtener un ticket para su director en su sistema cliente como parte del proceso de inicio de sesión estándar o manualmente ( kinitMIT Kerberos para Windows)?
  • ¿El servidor tiene un principal kerberos o puede darle uno? Debe ser de la forma host/[email protected].
  • ¿La GSSAPIautenticación está habilitada en su cliente?
  • ¿Sabe su cliente a qué reino pertenece el servidor, ya sea por registro de recursos TXT de DNS o por mapeo local?

Si dijo "sí" a todo lo anterior, felicidades, puede usar GSSAPIAuthentication.

  • Es posible que también deba habilitar la delegación de credenciales, según su configuración.

Pasos de prueba:
(Suponiendo: dominio = ejemplo.com; reino = EJEMPLO.COM)

  1. kinit [email protected]
    • Idealmente, esto es manejado por su proceso de inicio de sesión estándar incluyendo cualquiera pam_krb5o pam_sss(con auth_provider = krb5) en el apropiado pam stack.
  2. kvno host/[email protected]
    • Este es un paso de depuración. sshhace esto automáticamente si tiene un caché válido y está hablando con uno sshdque admite gssapi-with-mico gssapi-keyex.
  3. dig _kerberos.example.com txt debería volver "EXAMPLE.COM"
    • Alternativamente, el mapeo podría almacenarse en la [domain_realm]sección de /etc/krb5.confas .example.com = EXAMPLE.COM, pero el dnsmétodo escala mucho mejor.
  4. ssh -o GSSAPIAuthentication=yes [email protected]
    • Para iniciar sesión en un nombre de usuario que no sea el de su director en el servidor, tendrá que saber mapearlo con los detalles a los que no voy a ingresar aquí.
84104
fuente
Hola. Te he dado +1 hace algún tiempo, pero de hecho, no sé cómo verificar tus cuatro puntos. (No soy administrador, solo desarrollador). ¿Podría proporcionar una línea de comando para verificar la conexión SSH usando gssapiauthentication? Tal vez también pueda usar gssapiauthenticationen mi máquina Linux. (¿debería usar kinitpara eso?) Cheers;)
olibre
5

El método de 4 pasos es correcto (también hay registros de Kerberos SRV en DNS que son aún más elegantes y están presentes en cada Active Directory). Lo uso todo el tiempo y he estado abogando por los métodos anteriores de pubkey por razones relacionadas principalmente con la seguridad y el control.

Dicho esto, esto solo proporciona un inicio de sesión interactivo, aunque puede ser casi interactivo una vez que haya recibido un ticket en su estación de trabajo. El ticket Kerberos actúa de manera muy similar al agente SSH; una vez que lo tenga, las nuevas conexiones son instantáneas y sin contraseña; aunque con un límite de tiempo.

Para obtener un inicio de sesión por lotes interactivo, debe obtener un archivo de tabla de claves, un archivo que esencialmente contiene la contraseña para una cuenta de Kerberos, muy similar a la mitad privada de una clave SSH. Según las precauciones de seguridad se aplican; especialmente porque el keytab no está encriptado o protegido con una contraseña.

Soy bastante reacio a proporcionar a mis usuarios sus pestañas clave para sus cuentas personales, pero estoy usando agresivamente cuentas de servicio con permisos mínimos para varios trabajos por lotes, especialmente cuando es crítico que las credenciales se deleguen en el sistema remoto, algo que pubkey simplemente puede ' t lograr.

Las pestañas se pueden crear usando ktutil en Unix o KTPASS.EXE en Windows (este último de los servicios AD Kerberos). Tenga en cuenta que ktutil existe en dos sabores, Heimdal y MIT, y su sintaxis difiere. Leer la página de manual en un sistema relevante ayuda.

mansaxel
fuente