
나는 일부 코드를 상속받았습니다. 무엇보다도 authorized_keys
다음과 같은 형식의 X.509 키가 포함된 사용자 정의 파일이 있습니다.
x509v3-sign-rsa subject:O=GrandsChocolatiers Ltd.,OU=Management,OU=Top
파일이 올바른 키를 제공하지 않는 /mydir/authorized_keys
경우 SSH가 사용자 정의 파일에서 읽는 프로세스입니다 . /.ssh/authorized_keys
한 키에 변경이 있어서 하나의 키 값에 쉼표( ,
)를 추가해야 한다는 점을 제외하면 모든 것이 잘 진행되었습니다.
subject:O=GrandsChocolatiers, Ltd.,OU=Management,OU=Top
이제 sshd 오류가 발생합니다.
error: x509key_str2X509NAME: cannot parse 'Ltd.'
error: key_read: uudecode subject:O=GrandsChocolatiers, Ltd.,...
\,
를 사용하여 키 파일에서 문자열을 작은따옴표와 큰따옴표로 묶어서 이스케이프를 시도 했지만 \\,
삽입된 기호에 따라 오류 텍스트가 변경되더라도 오류는 여전히 존재합니다.
SSH가 키를 읽을 때 쉼표를 이스케이프 처리할 수 있는 방법이 있나요? 다른 형식의 키를 넣을 수 있는 방법이 있나요?
man authorized_keys
박스 위에서 작업을 하고 설명서를 읽었습니다. 슬래시를 사용하여 구분할 수도 있지만 쉼표와 함께 사용하므로 거기에는 가지 않습니다.
참고: 키는 변경할 수 없습니다.
답변1
얼마 후 나는 그것에 대해 내가 할 수 있는 일이 있는지 알아보기 위해 조금 더 파고들려고 노력했습니다. 패치와 매뉴얼 페이지를 살펴보면 다음과 같은 몇 가지 사항이 언급되어 있습니다.
[...] 줄에는 base64로 인코딩된 X.509 인증서(이전 스타일) 또는 키워드(새 스타일)가 포함되어야 하며, 선택적으로 기호 '='(같음) 또는 ':'(콜론), 0개 이상의 공백 및 X가 와야 합니다. .509 인증서 ``고유 이름''(제목). 키워드는 대소문자를 구분하지 않으며 'Subject' , 'Distinguished Name' , 'Distinguished-Name' , 'Distinguished_Name' , 'DistinguishedName' 또는 'DN' 중 하나일 수 있습니다. 제목 항목의 구분 기호는 '/'(슬래시), ','(쉼표) 또는 혼합일 수 있으며 순서는 중요하지 않습니다.
키-값을 슬래시로 구분하여 파서를 더 행복하게 만들 수 있다는 것을 알 수 있습니다.
subject:O=GrandsChocolatiers, Ltd./OU=Management/OU=Top
하지만 불행히도 그렇지 않습니다. 파서는 매우 "더미"해 보이고 컨텍스트에 관계없이 두 구분 기호를 모두 구문 분석하며 이스케이프 시퀀스를 지원하지 않습니다.
+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);
+}
따라서 이것이 여전히 걱정된다면 코드를 패치하거나 이 코드 작성자에게 편지를 보내 문제를 해결해야 할 것입니다(아마도이 메일링 리스트).