
Ich habe etwas Code geerbt; unter anderem gibt es eine benutzerdefinierte authorized_keys
Datei mit X.509-Schlüsseln in einem Format wie diesem:
x509v3-sign-rsa subject:O=GrandsChocolatiers Ltd.,OU=Management,OU=Top
Der Vorgang ist so, dass SSH aus der benutzerdefinierten /mydir/authorized_keys
Datei liest, wenn die /.ssh/authorized_keys
Datei nicht den richtigen Schlüssel enthält. Das lief alles problemlos, außer dass sich ein Schlüssel geändert hat und einem ,
Schlüsselwert ein Komma ( ) hinzugefügt werden musste.
subject:O=GrandsChocolatiers, Ltd.,OU=Management,OU=Top
Jetzt bekomme ich einen SSHD-Fehler
error: x509key_str2X509NAME: cannot parse 'Ltd.'
error: key_read: uudecode subject:O=GrandsChocolatiers, Ltd.,...
Ich habe versucht, dem in der Schlüsseldatei zu entkommen \,
, \\,
indem ich die Zeichenfolge in einfache und doppelte Anführungszeichen gesetzt habe, aber der Fehler ist immer noch da, obwohl sich der Fehlertext mit dem eingefügten Symbol ändert.
Gibt es für SSH eine Möglichkeit, beim Lesen der Schlüssel das Komma zu umgehen? Gibt es eine Möglichkeit, ein anderes Format für den Schlüssel festzulegen?
Ich habe mir man authorized_keys
die Verpackung angesehen und das Handbuch durchgelesen. Dort steht, dass man auch einen Schrägstrich zur Trennung verwenden kann, allerdings in Kombination mit einem Komma, also nichts.
Hinweis: Der Schlüssel kann nicht geändert werden.
Antwort1
Nach einiger Zeit habe ich versucht, mich ein wenig damit zu befassen, um herauszufinden, ob ich etwas dagegen tun kann. Beim Durchsehen des Patches und der Manualpage werden mehrere Dinge erwähnt:
[...] muss ein base64-kodiertes X.509-Zertifikat (alter Stil) oder ein Schlüsselwort (neuer Stil) enthalten, optional gefolgt vom Symbol '=' (Gleichheit) oder ':' (Doppelpunkt), null oder mehr Leerzeichen und dem X.509-Zertifikat ``Distinguished Name'' (Betreff). Das Schlüsselwort ist nicht groß-/kleinschreibungsabhängig und kann eines der folgenden Elemente sein: 'Betreff', 'Distinguished Name', 'Distinguished-Name', 'Distinguished_Name', 'DistinguishedName' oder 'DN. Trennzeichen für Betreffelemente können '/' (Schrägstrich), ',' (Komma) oder gemischt sein, die Reihenfolge ist nicht wichtig.
Wir können beobachten, dass wir die Schlüsselwerte auch mit einem Schrägstrich trennen können, was den Parser glücklicher machen kann:
subject:O=GrandsChocolatiers, Ltd./OU=Management/OU=Top
Aber leider nicht. Der Parser sieht sehr „blöd“ aus, analysiert beide Trennzeichen kontextunabhängig und unterstützt keine Escape-Sequenzen:
+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);
+}
Wenn es also immer noch ein Problem für Sie ist, müssen Sie wahrscheinlich den Code patchen und/oder den Autor dieses Codes anschreiben, um das Problem zu beheben (wahrscheinlich aufdiese Mailingliste).