
Heredé algún código; entre otras cosas, existe un authorized_keys
archivo 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_keys
archivo personalizado, si el /.ssh/authorized_keys
archivo 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_keys
en 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).