はい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/)チェーンでいっぱいになり、許可されたキーのリストを印刷するには別のキーが必要になるため、実際の論理同期と同じように保存するには追加のメンテナンスが必要です。 :(

おすすめ記事