はいssh -Q key

はいssh -Q key

マイシステム(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-keygenxmssのように。このコマンドは、ssh -Q key有効なすべてのパラメーターを表示しますssh-keygen -t

  • 同じオプション
  • 同じ図書館

この回答はコメントからインスピレーションを得たスティーブン・チャジェラス。彼らが言及した「これらすべてのタイプのキーを生成できるかどうかはわかりません。」どちらもサポートされていることを確認しました。

for c in $(ssh -Q key); do ssh-keygen -t "$c"; done < /dev/null

関連情報