我一直在研究 OpenSSH(Debian 9 上的 7.4p1-10)加密设置,并注意到,当我在 sshd_config 中设置时
HostKeyAlgorithms [email protected]
并使用以下命令生成主机密钥:
ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -t ssh-ed25519
服务器抱怨:
debug3: list_hostkey_types: ssh-ed25519 key not permitted by HostkeyAlgorithms [preauth]
有趣的是,ssh-keygen -t 以 ssh-ed25519-cert-v01 作为参数,但无法生成密钥。这个算法的目的是什么?我在哪里可以找到有关它的更多信息?
# ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t "[email protected]"
Generating public/private [email protected] key pair.
key_generate failed
答案1
手册页ssh-keygen
有一个关于“证书”的部分。
OpenSSH 证书在概念上类似于 X.509 (SSL/TLS) 证书 - 客户端或服务器信任一个密钥作为认证机构,自动接受所有服务器或用户的公钥用该密钥签名。(与 X.509 不同,OpenSSH 证书格式仅支持直接信任,而不支持传递;不能存在“中间” CA。)
尽管 7.4 错误地接受了 中的证书格式-t
,但以这种方式生成它们毫无意义。首先,您需要生成一个清楚的密钥对(目前支持所有类型),然后使用ssh-keygen -s ... [-h|-u] ...
CA 密钥对对公钥进行签名,输出证书。
(理论上,可以ssh-keygen
生成密钥对并立即对其进行签名,但从安全角度来看这没有意义——CA 没有必要访问私钥,更不用说担心将其分发给用户/服务器。让用户/服务器生成他们自己的密钥对。)