產生一組金鑰

ssh-keygen -t rsa -b 4096 -f ca_key -C "My SSH Certificate Authority"

  • 會產生兩個檔案
    • ca_key
    • ca_key.pub

公鑰分發到要被登錄的機器上 (sshd server)

/etc/ssh/sshd_config

TrustedUserCAKeys /etc/ssh/ca_key.pub

systemctl restart sshd

產生一組金鑰,做為客戶端的金鑰

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "user@example.com"

  • 會產生兩個檔案
    • id_ed25519
    • id_ed25519.pub

用 ca 私鑰與 用戶公鑰簽發證書

ssh-keygen -s ca_key -I "user@example.com-cert" -n user1,user2 -V +52w id_ed25519.pub

  • -s ca_key: 指定用於簽署的 CA 私鑰。

  • -I “user@example.com-cert”: 指定一個證書 ID,用於日誌記錄和審計。

  • -n user1,user2: 指定此證書允許登錄的用戶名(如果未指定,則默認為金鑰的註釋部分)。這是 SSH 伺服器在驗證證書時會檢查的用戶名。

  • -V +52w: 設置證書的有效期,例如這裡設置為 52 週。

    • +52w
    • +10m
  • id_ed25519.pub: 要簽署的用戶公鑰文件。

  • 會產生一個檔案

    • id_ed25519-cert.pub

將私鑰與證書放在客戶端的 ~/.ssh 目錄下即可登錄

id_ed25519 to client side ~/.ssh/ id_ed25519-cert.pub to client side ~/.ssh/

其它

查看發現的證書內容

$ ssh-keygen -L -f id_ed25519-cert.pub

# out--------------------------------------------
id_ed25519-cert.pub:
        Type: ssh-ed25519-cert-v01@openssh.com user certificate
        Public key: ED25519-CERT SHA256:abvpqWrGyRo6Ubb9u6CFgPldA1O/E8rhws8kmGbFlMc
        Signing CA: RSA SHA256:pzWbZ7jVW8qVYIBbKpRSu1latMeZ/HDs5QkzJ6dFu0I (using rsa-sha2-512)
        Key ID: "user@example.com-cert"
        Serial: 0
        Valid: from 2025-06-09T06:30:00 to 2025-06-09T06:34:53
        Principals:
                root
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc