21/05/2026

Vault – Dinamik SSH keys

Amacimiz her ssh ta farkli bir anahtar kullanmak ve böylece sabit anahtar ihtiyacindan kurtulmak.

Bunun icin “vault” kullanacagiz.

Öncelikle ilgili ssh secret enginini aktif edecegiz.

vault secrets enable -path=can_ssh_training ssh

daha sonra Vault u SSH Certificate Authority haline getirecegiz.

vault write can_ssh_training/config/ca generate_signing_key=true

Public Key i okumak istersek

vault read -field=public_key can_ssh_training/config/ca

Daha sonra Vault ta SSH Role ünü tanimlamamiz gerekiyor.

vault write can_ssh_training/roles/ssh-access-role -<<"EOH"
{
  "key_type": "ca",
  "allow_user_certificates": true,
  "allow_user_key_ids": true,
  "allowed_users": "vaultTestUser2,vaultTestUser",
  "default_user": "vaultTestUser2",
  "ttl": "30m",
  "allowed_extensions": "*",
  "default_extensions": {
    "permit-pty": "",
    "permit-port-forwarding": "",
    "permit-agent-forwarding": ""
  }
}
EOH

NOT: Vault burada jsonin nasil yazildigi konusunda cok hassas.

Check edelim.

vault read can_ssh_training/roles/ssh-access-role
Key                            Value
---                            -----
algorithm_signer               default
allow_bare_domains             false
allow_empty_principals         false
allow_host_certificates        false
allow_subdomains               false
allow_user_certificates        true
allow_user_key_ids             true
allowed_critical_options       n/a
allowed_domains                n/a
allowed_domains_template       false
allowed_extensions             *
allowed_user_key_lengths       map[]
allowed_users                  vaultTestUser2,vaultTestUser
allowed_users_template         false
default_critical_options       map[]
default_extensions             map[permit-agent-forwarding: permit-port-forwarding: permit-pty:]
default_extensions_template    false
default_user                   vaultTestUser2
default_user_template          false
key_id_format                  n/a
key_type                       ca
max_ttl                        0s
not_before_duration            30s
ttl                            30m

Simdi artik bu user icin bir key yaratacagiz ve bunu vault imzalayip sertifika olusturacak bu sertifika ile ssh yapacagiz .

ssh-keygen -t rsa -b 4096 -f ~/.ssh/vault_ssh

ve simdi artik bu user icin sertifika olusturacagiz.

vault write -field=signed_key   can_ssh_training/sign/ssh-access-role   public_key=@$HOME/.ssh/vault_ssh.pub   > $HOME/.ssh/vault_ssh-cert.pub

Sertifikayi incelemek istersek

ssh-keygen -Lf .ssh/vault_ssh-cert.pub
.ssh/vault_ssh-cert.pub:
        Type: ssh-rsa-cert-v01@openssh.com user certificate
        Public key: RSA-CERT SHA256:LZjNChO4wr4EMWHcynP6w0jQbpPTn4iAebRfLz1UpCk
        Signing CA: RSA SHA256:bknvbsNOnSzZOwJYVcgr5iVhRzbwlx+3YB8IP2DFSWQ (using rsa-sha2-256)
        Key ID: "vault-root-2d98cd0a13b8c2be043161dcca73fac348d06e93d39f888079b45f2f3d54a429"
        Serial: 11241780918389502608
        Valid: from 2026-05-21T13:46:44 to 2026-05-21T14:17:14
        Principals:
                vaultTestUser2
        Critical Options: (none)
        Extensions:
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty

Simdi Linux Hostunu ayarlamamiz gerekiyor.

Linux Host

Gereksinim : Home klasörü ve default shell i olan bir user gerekiyor. Benim planim sadece o user a ssh vermek ve her user icin ayri ssh vermek.

useradd -m -s /bin/bash vaultTestUser2

Ayrica Vault un CA Public Key sertifikasini sisteme güvenilir sertifika olarak tanitmamiz gerekiyor.

nano /etc/ssh/trusted-user-ca-keys.pem
sh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3pTAzr8q/L7aNb7uyWtEyOHLfNjOAKVcDQXSPI+oGtyvY5Yhhyyf6oJRxOENUJbMqUDZNLsWv0cJDUhvjBGk+qE6+/Qkr4h3d+FLMgBLd55lY2+IYCLmODVnJKi2QQ3FaiXPI0Xff+1hTPMtcGATlZQHLW+w37eC......

Ayrica kasitli olarak izin vermek gerekiyor.

cat /etc/ssh/auth_principals/vaultTestUser2
vaultTestUser2

Daha sonra “sshd_config” i editliyoruz

#VAULT
TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem
PermitTTY yes
PermitUserRC yes
PermitOpen any
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
ChallengeResponseAuthentication no
PermitUserEnvironment yes

Test

ls -lap .ssh/
-rw-------@  1 staff  staff   3401 May 21 07:57 vault_ssh
-rw-r--r--@  1 staff staff   2546 May 21 13:47 vault_ssh-cert.pub
-rw-r--r--@  1 staff  staff    754 May 21 07:57 vault_ssh.pub

ssh -i .ssh/vault_ssh vaultTestUser2@192.168.0.12