我的系统(Fedora 35)上 ssh-keygen 的手册页显示支持以下类型的密钥:
\n-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa\n Specifies the type of key to create. The possible values are\n \xe2\x80\x9cdsa\xe2\x80\x9d, \xe2\x80\x9cecdsa\xe2\x80\x9d, \xe2\x80\x9cecdsa-sk\xe2\x80\x9d, \xe2\x80\x9ced25519\xe2\x80\x9d, \xe2\x80\x9ced25519-sk\xe2\x80\x9d, or \xe2\x80\x9crsa\xe2\x80\x9d.\n
Run Code Online (Sandbox Code Playgroud)\n有没有办法在运行时通过向脚本ssh-keygen
或其他脚本传递一些特殊标志来查阅此列表?或者这个类型列表是硬编码的并且仅在此手册页中指定?我问这个问题的原因是我想教我的 shell 如何自动完成-t
。
我不认为有:关键类型需要在这个中列表中(切换到代表您正在使用的 openssh 版本的标签,而不是页面顶部的“V_8_9_P1”):
\n case KEY_DSA_CERT:\n case KEY_DSA:\n name = _PATH_SSH_CLIENT_ID_DSA;\n break;\n#ifdef OPENSSL_HAS_ECC\n case KEY_ECDSA_CERT:\n case KEY_ECDSA:\n name = _PATH_SSH_CLIENT_ID_ECDSA;\n break;\n case KEY_ECDSA_SK_CERT:\n case KEY_ECDSA_SK:\n name = _PATH_SSH_CLIENT_ID_ECDSA_SK;\n break;\n#endif\n case KEY_RSA_CERT:\n case KEY_RSA:\n name = _PATH_SSH_CLIENT_ID_RSA;\n break;\n case KEY_ED25519:\n case KEY_ED25519_CERT:\n name = _PATH_SSH_CLIENT_ID_ED25519;\n break;\n case KEY_ED25519_SK:\n case KEY_ED25519_SK_CERT:\n name = _PATH_SSH_CLIENT_ID_ED25519_SK;\n break;\n case KEY_XMSS:\n case KEY_XMSS_CERT:\n name = _PATH_SSH_CLIENT_ID_XMSS;\n
Run Code Online (Sandbox Code Playgroud)\n没有办法查询这个。我可以理解为什么 \xe2\x80\x93 这在 C++ 或任何其他现代语言中很容易,但 C 不仅不在其标准库中引入任何“map<key, value>”类型,而且还这样做使得安全地建造或使用它们相对困难。
\n因此,C 代码中充斥着switch
/ case
(或者,如果密钥无法转换为整数,if/
则 else if`)链,并且打印接受的密钥列表只需要另一个密钥,这需要额外的维护工作来保持与实际逻辑同步:(
归档时间: |
|
查看次数: |
2379 次 |
最近记录: |