SSH keys to managed nodes

1) SSH Key Nedir ve Neden Önemlidir?

  • SSH Key’ler, makinenize kullanıcı adı ve şifre girmeden (passwordless) bağlanmanızı sağlayan bir “anahtar” sistemidir.

  • İki dosyadan oluşur:

    1. Private Key: Sizin makinenizde (yerel) kalmalı ve asla başka biriyle paylaşılmamalıdır.

    2. Public Key: Hedef (remote) makinenin belirli bir dosyasında saklanır; bu sayede o makine, sizin Private Key’inizle eşleştiğini doğrular.

Bu ikiliyi bir “kilit ve anahtar” gibi düşünebilirsiniz. Public Key uzak makinede “kilit” görevi görür. Sadece “uyumlu Private Key” (sizin anahtarınız) o kilidi açabilir.

2) SSH Key’lerinizi Nasıl Oluşturursunuz?

  1. Kontrol Makinenize (yani Ansible kurulu olan makineye) giriş yapın.

  2. Terminalde şu komutu çalıştırın:

    ssh-keygen
  3. Komut size birkaç soru sorar (örneğin, key’i nereye kaydetmek istediğiniz veya bir parola belirlemek isteyip istemediğiniz gibi). Eğer varsayılan seçeneklerle devam ederseniz, ~/.ssh/id_rsa (özel anahtar) ve ~/.ssh/id_rsa.pub (açık anahtar) isimli iki dosya oluşur.

3) Public Key’i (Açık Anahtar) Uzak Makineye Nasıl Kopyalarsınız?

Yöntem 1: Elle Kopyalama

  1. Public Key içeriğine bakın:

    cat ~/.ssh/id_rsa.pub
  2. Çıktıyı kopyalayın ve hedef makinede (örneğin web1 sunucusunda) şu dosyaya ekleyin:

    ~/.ssh/authorized_keys

    Dosya yoksa oluşturabilirsiniz. Ardından aşağıdaki gibi kontrol edin:

    cat ~/.ssh/authorized_keys

    Public Key metniniz orada olmalı.

  3. Artık Ansible kontrol makinenizdeki özel anahtar (id_rsa) ile, hedef makineye şifresiz erişebilirsiniz.

Yöntem 2: ssh-copy-id Aracı

SSH copy-id, public key’inizi hedef makineye otomatik olarak ekleyen kolay bir araçtır:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@hedef_makine

Önce uzak makinenin şifresini sorar (ilk bağlantı için). Kopyalama bittiğinde şifreye gerek kalmaz.

4) Ansible Ortamında SSH Keys Kullanımı

  1. Kontrol Makinesi: SSH anahtarlarınızı barındıran makine.

  2. Yönetilen Makineler (Managed Nodes): Public Key’inizi authorized_keys dosyalarına eklediğiniz sunucular.

Ansible, hedef sistemlere bağlanırken SSH kullanır. Dolayısıyla, private key’iniz ile hedef makinelere parolasız erişebilirsiniz.

Envanter (hosts) Dosyanızı Güncelleme

Eskiden şöyle bir envanter kullanıyor olabilirsiniz:

web1 ansible_host=192.168.1.100 ansible_ssh_pass=Passw0rd
web2 ansible_host=192.168.1.101 ansible_ssh_pass=Passw0rd

Parolayla kimlik doğrulamayı bırakıp SSH Key’e geçmek için artık ansible_ssh_pass kısmını kaldırabilirsiniz. Ayrıca eğer root kullanıcısı dışında farklı bir kullanıcıyla (örnek: ansible) bağlanacaksanız, bunu belirtmeniz gerekir:

[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ansible
web2 ansible_host=192.168.1.101 ansible_user=ansible
  • Eğer private key (id_rsa) dosyanız varsayılan ~/.ssh/ yolunda ise, Ansible bunu otomatik algılar.

  • Eğer özel bir yerde saklıyorsanız, şöyle belirtmeniz yeterli:

    web1 ansible_host=192.168.1.100 ansible_user=ansible ansible_ssh_private_key_file=/path/to/id_rsa

5) Sonraki Adımlar

  1. Şifre Tabanlı Girişleri Kapatma: Sunucularınızda her şey sorunsuz çalıştıktan sonra, ekstra güvenlik için PasswordAuthentication no ayarlayarak parolalı girişi engelleyebilirsiniz.

  2. Otomatikleştirme: Yüzlerce sunucunuz varsa, ssh-copy-id veya Ansible modülleri (örneğin, authorized_key) ile bu işlemi toplu halde yapabilirsiniz.

  3. Güvenlik İpuçları: Private key’inizi mutlaka korunaklı bir yerde saklayın; paylaşılan dizinlerde bulundurmayın.

6) Özet

  • SSH Anahtarları “kilit & anahtar” mantığıyla çalışır. Private Key sizde kalır, Public Key uzak makinede authorized_keys içine eklenir.

  • Parolasız Bağlantı: Anahtarlar doğru eşleşiyorsa parola girmenize gerek kalmaz.

  • Ansible Entegrasyonu: Ansible, normal SSH bağlantısını kullanır, dolayısıyla bu adımları yaptıktan sonra envanter dosyanızda kullanıcı ve key bilgilerini ayarlamanız yeterli.

  • Güvenlik: Parolasız erişim sağlamak, doğru yapılandırıldığında (örneğin password-based login’i kapatarak) çok daha güvenli ve pratik bir yöntemdir.

Last updated

Was this helpful?