OpenBSD 和 RHEL 上的 ssh-keygen 及其 -Z 选项

Kus*_*nda 6 ssh rhel openbsd certificates

我正在阅读有关为 RHEL 6 编写的SSH 证书的相当不错的文本并且openssh-5.3p1-94.el6(这使它大约有 10 年的历史),同时试图模仿我的 OpenBSD 当前系统上的示例。

示例之一显示了创建主机 CA 密钥,然后签署主机的 RSA 密钥:

ssh-keygen -s ~/.ssh/ca_host_key -I host_name -h -Z host_name.example.com -V -1w:+54w5d /etc/ssh/ssh_host_rsa.pub
Enter passphrase:
Signed host key /root/.ssh/ssh_host_rsa-cert.pub: id "host_name" serial 0 for host_name.example.com valid from 2015-05-15T13:52:29 to 2016-06-08T13:52:29
Run Code Online (Sandbox Code Playgroud)

当我在 OpenBSD 上尝试这个时,我没有得到for host_name.example.com输出。文字是这样说的

-Z选项将此证书限制为域内的特定主机。

...我对此有点困惑,因为OpenBSD 手册ssh-keygen(1)根本没有提到一个-Z选项。我也很困惑ssh-keygen接受这个没有记录的选项而不抱怨。

查看的源代码ssh-keygen,该-Z选项接受,但似乎与“格式密码”(或可能是“密码格式”)而不是主机名有关(前提是我正在查看正确的代码):

case 'Z':
    openssh_format_cipher = optarg;
    break;
Run Code Online (Sandbox Code Playgroud)

查看旧版本的代码,它总是与“格式密码”有关。

OpenSSH 的发行说明没有提到-Z.

问题:是否ssh-keygen在 RHEL 6 上(我不确定该版本是否相关,但关于 RHEL 7 或 RHEL 8 的 SSH 证书的等效文档似乎不可用)是否用 RedHat-only 补丁进行了修补,从而使-Z行为有所不同?

mos*_*svy 8

tl;博士; 对于较新版本的 OpenSSH,您应该使用该-n选项而不是-Z设置主体(例如主机名或用户)。

查看 的源代码ssh-keygen,该-Z选项被接受,但似乎与“格式密码”有关

是的,您没有收到错误的原因是因为openssh_format_cipher在创建证书时不使用该变量,而仅在使用密码生成密钥时才使用该变量。

如果您生成密钥ssh-keygen -f ./path -Z some_garbage并设置密码,您将收到错误消息。

是否ssh-keygen在 RHEL 6 上...使用 RedHat-only 补丁进行修补,从而使-Z行为有所不同?

是的,它曾经是。你可以openssh-5.3p1-ssh-certificates.patch这里看到:

+               case 'Z':
+                       cert_principals = optarg;
+                       break;
                case 'p':
Run Code Online (Sandbox Code Playgroud)

该补丁不再用于较新的 rpm 中。