SSH no puede leer una clave del archivo personalizado autorizado_keys debido a una coma

SSH no puede leer una clave del archivo personalizado autorizado_keys debido a una coma

Heredé algún código; entre otras cosas, existe un authorized_keysarchivo personalizado con claves X.509 en un formato como este:

x509v3-sign-rsa subject:O=GrandsChocolatiers Ltd.,OU=Management,OU=Top

El proceso es tal que SSH lee el /mydir/authorized_keysarchivo personalizado, si el /.ssh/authorized_keysarchivo no proporciona la clave correcta. Todo iba bien, excepto que hubo un cambio en una clave y ,se tuvo que agregar una coma ( ) a un valor de clave.

subject:O=GrandsChocolatiers, Ltd.,OU=Management,OU=Top

Ahora me sale un error sshd

error: x509key_str2X509NAME: cannot parse 'Ltd.'

error: key_read: uudecode subject:O=GrandsChocolatiers, Ltd.,...

Intenté escapar de esto en el archivo de claves usando \,, \\,poniendo la cadena entre comillas simples y dobles, pero el error sigue ahí, aunque el texto del error cambia con el símbolo insertado.

¿Hay alguna forma de que SSH escape la coma al leer las claves? ¿Hay alguna manera de poner un formato diferente de la clave?

Hice una revisión man authorized_keysen la caja y leí el manual. Dice que también se puede usar una barra diagonal para separar, pero se usa en combinación con una coma, así que no vayas allí.

Nota: La clave no se puede cambiar.

Respuesta1

Después de un tiempo, intenté profundizar un poco para ver si había algo que pudiera hacer al respecto. Al navegar por el parche y la página del manual, se mencionan varias cosas:

[...] debe contener un certificado X.509 codificado en base64 (estilo antiguo) o una palabra clave (estilo nuevo), seguido opcionalmente por el símbolo '=" (igual) o ':' (dos puntos), cero o más espacios y X. Certificado .509 ``Nombre distinguido'' (Asunto). La palabra clave no distingue entre mayúsculas y minúsculas y puede ser uno de "Asunto", "Nombre distinguido", "Nombre distinguido", "Nombre distinguido", "Nombre distinguido" o "DN". El separador de elementos de Asunto puede ser '/' (barra oblicua), ',' (coma) o mixto y el orden no es importante.

Podemos observar que también podemos separar los valores-clave con una barra, lo que puede hacer más feliz al analizador:

subject:O=GrandsChocolatiers, Ltd./OU=Management/OU=Top

Pero lamentablemente no. El analizador parece muy "tonto", analiza ambos separadores independientemente del contexto y no admite ninguna secuencia de escape:

+static const char*
+x509key_find_subject(const char* s) {
+   static const char *keywords[] = {
+       "subject",
+       "distinguished name",
+       "distinguished-name",
+       "distinguished_name",
+       "distinguishedname",
+       "dn",
+       NULL
+   };
+   const char **q, *p;
+   size_t len;
+
+   if (s == NULL) {
+       error("x509key_find_subject: no input data");
+       return(NULL);
+   }
+   for (; *s && ISSPACE(*s); s++)
+   {/*skip space*/}
+
+   for (q=keywords; *q; q++) {
+       len = strlen(*q);
+       if (strncasecmp(s, *q, len) != 0) continue;
+
+       for (p = s + len; *p && ISSPACE(*p); p++)
+       {/*skip space*/}
+       if (!*p) {
+           error("x509key_find_subject: no data after keyword");
+           return(NULL);
+       }
+       if (*p == ':' || *p == '=') {
+           for (p++; *p && ISSPACE(*p); p++)
+           {/*skip space*/}
+           if (!*p) {
+               error("x509key_find_subject: no data after separator");
+               return(NULL);
+           }
+       }
+       if (*p == '/' || *p == ',') {
+           /*skip leading [Relative]DistinguishedName elements separator*/
+           for (p++; *p && ISSPACE(*p); p++)
+           {/*skip space*/}
+           if (!*p) {
+               error("x509key_find_subject: no data");
+               return(NULL);
+           }
+       }
+       return(p);
+   }
+   return(NULL);
+}

Entonces, si todavía le preocupa, probablemente necesite parchear el código y/o escribirle al autor de este código para solucionarlo (probablemente enesta lista de correo).

información relacionada