我看過很多關於如何成為自己的憑證授權單位 (CA) 的教學。我看到的教學是關於如何產生 ssl 金鑰而不是 ssh 金鑰,所以我想知道如何產生像 Ubuntu Server 14.04 LTS 中的 ssh 金鑰?我想這樣做的原因是我可以更好地管理 ssh 金鑰,並允許我在他們離開公司時撤銷它們,這樣他們就無法再訪問該伺服器了。
答案1
你不能。 SSH 不會查看 CRL 或類似的內容來查看金鑰是否仍然有效。如果您希望能夠輕鬆刪除離開商店的人員對伺服器的存取權限,我可以想到兩個選擇:
- 不要直接管理金鑰,而是透過像 puppet 這樣的東西來管理它們(這直接支援在檔案中新增和刪除單一金鑰
authorized_keys
)。這樣,您只需在一個位置新增或刪除 ssh 金鑰,並且 puppet 可確保在所有主機上啟動更改 - 完全停用
PubKeyAuthentication
,切換到具有中央身份驗證系統的其他身份驗證(例如,Kerberos 確實允許無密碼身份驗證並具有中央身份驗證資料庫,但對於外行人來說設定起來有些複雜)。
答案2
OpenSSH 自 5.4 版起就有了自己的實際憑證。它們在結構上比 X509 憑證更簡單,但具有許多相似的功能。
您建立常規 ssh 金鑰對並用作 CA。最好是一個主機 CA 和一個使用者 CA。然後您可以使用 ssh-keygen 與此 CA 簽署公鑰。例如
ssh-keygen -s /path/to/ca_key -I key_id -z serial \
-n principal1,principal2 -V +53w /path/to/user_key.pub
此命令將建立一個名為 user_key-cert.pub 的文件,該文件現在是您的憑證。此憑證的有效期為 53 週,可用於在信任簽署金鑰的 CA 的任何主機上以主體 1 和主體 2 身分登入。
要告訴 sshd 要信任這個 CA,只要像這樣引用 sshd_config 中的 ca_key.pub
TrustedUserCAKeys /etc/ssh/ca_key.pub
還有幾種撤銷 ssh 憑證的方法(您的實際問題),這些方法在 openssh 的手冊中提到。但 sshd_config 中的基本選項是 RevokedKeys。為此,您可以使用文字檔案或二進位 KRL。
有關更多信息,我編寫了一些有關 SSH CA 的指南 https://framkant.org/2016/10/setting-up-a-ssh-certificate-authority-ca/
對於更細粒度和可擴展的存取控制,請查看: https://framkant.org/2017/07/scalable-access-control-using-openssh-certificates/