O SSH não pode ler uma chave do arquivo custom_keys personalizado devido a uma vírgula

5

Eu herdei algum código; entre outras coisas, há um arquivo authorized_keys personalizado com chaves X.509 em um formato como este:

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

O processo é tal que o SSH lê a partir do arquivo /mydir/authorized_keys personalizado, se o arquivo /.ssh/authorized_keys não fornecer a chave correta. Tudo corria bem, exceto que houve uma mudança em uma chave e uma vírgula ( , ) teve que ser adicionada a um valor-chave.

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

Agora, recebo um erro sshd

error: x509key_str2X509NAME: cannot parse 'Ltd.'

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

Eu tentei escapar disso no arquivo de chaves usando \, , \, colocando a string entre aspas simples e duplas, mas o erro ainda está lá, embora o texto do erro mude com o símbolo inserido.

Existe alguma maneira de o SSH escapar da vírgula ao ler as chaves? Existe uma maneira de colocar um formato diferente da chave?

Eu fiz um man authorized_keys na caixa e li o manual. Ele diz que uma barra também pode ser usada para separar, mas é usada em combinação com uma vírgula, então não vá até lá.

Nota: a chave não pode ser alterada.

    
por dzookatz 11.12.2015 / 14:35

1 resposta

0

Depois de algum tempo eu tentei cavar um pouco para ver se há algo que eu possa fazer sobre isso. Navegando pelo patch e pela página de manual, há várias coisas mencionadas:

[...] line must contain base64 encoded X.509 certicate (old style) or a keyword (new style), optionally followed by symbol '=' (equal) or ':' (colon), zero or more spaces and X.509 certificate ''Distinguished Name'' (Subject). Keyword is case insensitive and can be one of 'Subject' , 'Distinguished Name' , 'Distinguished-Name' , 'Distinguished_Name' , 'DistinguishedName' or 'DN'. Separator of Subject items can be '/' (slash), ',' (comma) or mixed and order is not important.

Podemos observar que podemos separar os valores-chave também com uma barra, o que pode deixar o analisador mais feliz:

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

Mas infelizmente não. O analisador parece muito "fictício", analisa ambos os separadores independentemente do contexto e não suporta nenhuma sequência 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);
+}

Então, se ainda é uma preocupação para você, você provavelmente precisará corrigir o código e / ou escrever para o autor deste código para corrigir isso (provavelmente em esta lista de discussão ).

    
por 12.04.2017 / 22:06