OpenBSD 和 RHEL 上的 ssh-keygen 及其 -Z 選項
在嘗試模仿我的 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。