내 시스템(Fedora 35)의 ssh-keygen 매뉴얼 페이지에는 다음 유형의 키가 지원되는 것으로 나와 있습니다.
-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
Specifies the type of key to create. The possible values are
“dsa”, “ecdsa”, “ecdsa-sk”, “ed25519”, “ed25519-sk”, or “rsa”.
ssh-keygen
스크립트나 다른 스크립트에 특수 플래그를 전달하여 런타임에 이 목록을 참조할 수 있는 방법이 있습니까 ? 아니면 이 유형 목록이 하드코딩되어 있고 이 매뉴얼 페이지에만 지정되어 있습니까? 내가 이 질문을 하는 이유는 쉘에게 인수를 자동 완성하는 방법을 가르치고 싶기 때문입니다 -t
.
답변1
나는 :key 유형이 있어야 한다고 생각하지 않습니다.이것목록(페이지 상단의 "V_8_9_P1"이 아닌 사용 중인 openssh 버전을 나타내는 레이블로 전환):
case KEY_DSA_CERT:
case KEY_DSA:
name = _PATH_SSH_CLIENT_ID_DSA;
break;
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA_CERT:
case KEY_ECDSA:
name = _PATH_SSH_CLIENT_ID_ECDSA;
break;
case KEY_ECDSA_SK_CERT:
case KEY_ECDSA_SK:
name = _PATH_SSH_CLIENT_ID_ECDSA_SK;
break;
#endif
case KEY_RSA_CERT:
case KEY_RSA:
name = _PATH_SSH_CLIENT_ID_RSA;
break;
case KEY_ED25519:
case KEY_ED25519_CERT:
name = _PATH_SSH_CLIENT_ID_ED25519;
break;
case KEY_ED25519_SK:
case KEY_ED25519_SK_CERT:
name = _PATH_SSH_CLIENT_ID_ED25519_SK;
break;
case KEY_XMSS:
case KEY_XMSS_CERT:
name = _PATH_SSH_CLIENT_ID_XMSS;
이에 대해 문의할 방법이 없습니다. 이유를 이해할 수 있습니다. 이는 C++나 다른 최신 언어에서는 쉬울 것입니다. 그러나 C는 표준 라이브러리에 "map<key, value>" 유형을 도입하지 않을 뿐만 아니라 이를 사용하여 빌드하는 것을 안전하게 만듭니다. 상대적으로 어렵다.
따라서 C 코드는 switch
/ case
(또는 키를 정수로 변환할 수 없는 경우 if/
) 체인으로 가득 차 있으며 허용되는 키 목록을 인쇄하려면 또 다른 키가 필요하므로 실제 논리 동기화와 동일하게 저장하려면 추가 유지 관리가 필요합니다. :(
답변2
예ssh -Q key
의 목록은 하드코딩되어 있으며 지원하기 위해 컴파일되었을 수 있는 --help
실험적 키를 제외합니다.ssh-keygen
xmss처럼. 이 명령은 ssh -Q key
유효한 모든 매개변수를 표시합니다 ssh-keygen -t
.
- 동일한 옵션
- 같은 도서관
이 답변은 의견에서 영감을 얻었습니다스티븐 차제라스. 그들이 언급한"이러한 모든 유형에 대한 키를 생성할 수 있는지 잘 모르겠습니다."둘 다 지원되는 것을 확인했습니다.
for c in $(ssh -Q key); do ssh-keygen -t "$c"; done < /dev/null