SSH kann einen Schlüssel aufgrund eines Kommas nicht aus der benutzerdefinierten Authorized_keys-Datei lesen

566
dzookatz

Ich habe einen Code geerbt. Unter anderem gibt es eine benutzerdefinierte authorized_keysDatei mit X.509-Schlüsseln in einem Format wie diesem:

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

Der Prozess ist so, dass der SSH aus der benutzerdefinierten /mydir/authorized_keysDatei liest, wenn die /.ssh/authorized_keysDatei nicht den richtigen Schlüssel bereitstellt. Das war alles in Ordnung, außer dass sich ein Schlüssel geändert hat und ein Komma ( ,) zu einem Schlüsselwert 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, dies in der Schlüsseldatei zu umgehen \,, \\,indem Sie die Zeichenfolge in einfache und doppelte Anführungszeichen setzen, aber der Fehler ist immer noch vorhanden, obwohl sich der Fehlertext mit dem eingefügten Symbol ändert.

Gibt es eine Möglichkeit für SSH, beim Lesen der Tasten das Komma zu umgehen? Gibt es eine Möglichkeit, ein anderes Format des Schlüssels zu setzen?

Ich habe eine man authorized_keysauf der Box gemacht und das Handbuch gelesen. Es sagt, dass ein Schrägstrich auch zum Trennen verwendet werden kann, aber er wird in Kombination mit einem Komma verwendet, also nicht dorthin gehen.

Hinweis: Der Schlüssel kann nicht geändert werden.

5
Nur eine wilde Vermutung hier, aber [diese Seite] (https://en.wikibooks.org/wiki/OpenSSH/Client_Configuration_Files#.7E.2F.ssh.2Fauthorized_keys) legt nahe, dass Whitespace in den Entertainires_keys-Optionen verwendet wird, um Optionen zu trennen. Haben Sie versucht, den Platz in `GrandsChocolatiers, Ltd. 'loszuwerden oder sich dem zu entziehen? amccormack vor 8 Jahren 0
Eine nette Vermutung :) Aber so sind die Tasten, und sie können nicht geändert werden. Es ist nicht der Platz, der das Problem verursacht, sondern das Komma. Beim Lesen des Handbuchs "authentication_keys" heißt es: "Trennzeichen für Betreffelemente können '/' (Schrägstrich), ',' (Komma) oder gemischt sein und die Reihenfolge ist nicht wichtig." vor 8 Jahren 0
Wenn ich richtig gelesen habe, ist dies openssh mit [x509-Patch] (http://roumenpetrov.info/openssh/), wodurch diese Erweiterung für autorisierte Schlüssel verwendet wird. Es sieht so aus, als wäre die Logik gebrochen, wenn Sie sie durch ein Komma im Wert "subject" auflösen können. Wenn der Wert nicht in Anführungszeichen gesetzt werden kann, ist dies wahrscheinlich Inhalt des Fehlerberichts für den Autor dieses Patches. Jakuje vor 8 Jahren 1
Wenn die Reihenfolge nicht wichtig ist, was ist, wenn Sie Folgendes versucht haben: `subject: OU = Oben, OU = Management, O = GrandsChocolatiers, Ltd.? Castaglia vor 8 Jahren 0
Die Umkehrung der Reihenfolge wird die Tatsache nicht lösen, dass dadurch nur der Teil zwischen den beiden Kommas getrennt wird. :) Es wird immer noch als besonderes Element erkannt - `Ltd.`. dzookatz vor 8 Jahren 0

1 Antwort auf die Frage

0
Jakuje

Nach einiger Zeit versuchte ich etwas zu suchen, um zu sehen, ob ich etwas dagegen tun kann. Beim Durchsuchen des Patches und der Handbuchseite werden mehrere Dinge erwähnt:

[...] Zeile muss base64-codiertes X.509-Zertifikat (alter Stil) oder ein Schlüsselwort (neuer Stil) enthalten, optional gefolgt von dem Symbol '=' (gleich) oder ':' (Doppelpunkt), null oder mehr Leerzeichen und X .509 Zertifikat "Distinguished Name" (Betreff). Bei dem Schlüsselwort wird nicht zwischen Groß- und Kleinschreibung unterschieden. Es kann zwischen 'Betreff', 'Distinguished Name', 'Distinguished-Name', 'Distinguished_Name', 'DistinguishedName' oder 'DN' bestehen. 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 "dumm" aus, analysiert beide Trennzeichen unabhängig vom Kontext 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 an den Autor dieses Codes schreiben, um das Problem zu beheben (wahrscheinlich auf dieser Mailingliste ).