Ssh

OpenBSD 和 RHEL 上的 ssh-keygen 及其 -Z 選項

  • April 19, 2020

在嘗試模仿我的 OpenBSD 目前系統上的範例時,我正在關注為 RHEL 6 編寫的SSH 證書和(這使得它大約有 10 年的歷史)的相當好的文本。openssh-5.3p1-94.el6

其中一個範例顯示創建主機 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

當我在 OpenBSD 上嘗試這個時,我沒有得到for host_name.example.com輸出。文中說

-Z選項將此證書限制為域中的特定主機。

…而且我對此感到有些困惑,因為OpenBSD 手冊ssh-keygen(1)根本沒有提到任何-Z選項。我也對ssh-keygen接受這個無證選項而不抱怨感到困惑。

查看的原始碼ssh-keygen,該-Z選項接受,但似乎與“格式密碼”(或可能是“密碼格式”)有關,而不是與主機名有關(前提是我正在查看正確的程式碼):

case 'Z':
   openssh_format_cipher = optarg;
   break;

查看舊版本的程式碼,它總是與“格式密碼”有關。

OpenSSH 的發行說明沒有提及-Z.

問題:是否ssh-keygen在 RHEL 6 上(我不確定該版本是否相關,但關於 RHEL 7 或 RHEL 8 的 SSH 證書的等效文件似乎不可用)使用 RedHat-only 更新檔進行修補,使-Z行為有所不同?

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':

該更新檔不再用於較新的 rpm。

引用自:https://unix.stackexchange.com/questions/558539