Skip to content
Bloga dön
Teknoloji Linux SSH Güvenlik Kimlik Doğrulama Sistem Yönetimi Otomatikleştirme Konteyner Güvenliği Mistral

Linux Sunucularda SSH Anahtar Tabanlı Kimlik Doğrulama: Güvenliği Artırmanın ve Kolaylaştırmanın Yolları

Linux sunucularınızda SSH erişimini daha güvenli ve yönetilebilir hale getirmek için parola yerine anahtar tabanlı kimlik doğrulamanın nasıl kurulacağını, avantajlarını ve en iyi uygulamalarını detaylıca öğrenin.

Caner Serbest

Sistem ve Altyapı

5 dk okuma

Linux Sunucularda SSH Anahtar Tabanlı Kimlik Doğrulama: Güvenliği Artırmanın ve Kolaylaştırmanın Yolları

Giriş

Linux sunucularında uzaktan erişim için en yaygın kullanılan protokol olan SSH (Secure Shell), sistem yöneticilerinin ve geliştiricilerin günlük işlerini kolaylaştırır. Ancak, geleneksel parola tabanlı kimlik doğrulama yöntemi, çeşitli güvenlik riskleri barındırır:

  • Brute-force saldırılarına karşı savunmasızlık
  • Parola yönetiminin zorluğu (özellikle takım çalışmalarında)
  • Otomatik senaryolarda parola girme gereksinimi

Bu riskleri ortadan kaldırmak ve SSH erişimini hem daha güvenli hem de daha verimli hale getirmek için anahtar tabanlı kimlik doğrulama (SSH key authentication) yöntemi kullanılmalıdır. Bu makalede, SSH anahtarlarının nasıl oluşturulacağını, sunucuda nasıl yapılandırılacağını ve en iyi uygulamaları adım adım inceleyeceğiz.


SSH Anahtarlarının Temelleri

SSH anahtarları, açık (public) ve özel (private) olmak üzere iki anahtar çiftinden oluşur:

  • Özel Anahtar (Private Key): Sizin bilgisayarınızda saklanır ve gizli tutulması gereken dosyadır. Hiçbir şekilde paylaşılmamalıdır.
  • Açık Anahtar (Public Key): Sunucunuza yüklenir ve kimlik doğrulama için kullanılır. Bu anahtar herkesle paylaşılabilir.

Anahtarlar, RSA, ECDSA veya Ed25519 gibi algoritmalar kullanılarak oluşturulabilir. Ed25519, modern ve güvenli bir tercih olarak öne çıkmaktadır.


Adım 1: SSH Anahtar Çifti Oluşturma

Gereksinimler

  • Bir Linux/Unix tabanlı sistem (veya macOS)
  • OpenSSH istemcisi (çoğu sistemde varsayılan olarak yüklüdür)

Komut ile Anahtar Oluşturma

Terminalde aşağıdaki komutu çalıştırarak yeni bir SSH anahtar çifti oluşturun:

ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_server_access

Komut açıklamaları:

  • -t ed25519: Anahtar türünü Ed25519 olarak belirler (güvenlik ve performans avantajı için).
  • -C "[email protected]": Anahtara bir açıklama ekler (genellikle e-posta adresi kullanılır).
  • -f ~/.ssh/id_ed25519_server_access: Anahtar dosyasının adını ve konumunu belirtir.

Komut çalıştırıldığında, size bir parola (passphrase) girmeniz istenecektir. Bu parola, özel anahtarınızın güvenliğini artırır. Parola girmek istemiyorsanız Enter tuşuna basarak boş bırakabilirsiniz (ancak bu önerilmez).

Anahtar oluşturulduktan sonra, ~/.ssh/ dizininde aşağıdaki dosyalar oluşacaktır:

  • id_ed25519_server_access (özel anahtar)
  • id_ed25519_server_access.pub (açık anahtar)

Adım 2: Açık Anahtarın Sunucuya Yüklenmesi

Oluşturulan açık anahtarı sunucunuza yüklemek için aşağıdaki adımları izleyin:

1. Açık Anahtarın Kopyalanması

Açık anahtarınızı sunucuya kopyalamak için ssh-copy-id komutunu kullanabilirsiniz:

ssh-copy-id -i ~/.ssh/id_ed25519_server_access.pub kullanici@sunucu-ip-adresi

Komut çalıştırıldığında, size sunucuya bağlanmak için kullanılan parolayı girmeniz istenecektir. Parola girildikten sonra, açık anahtar otomatik olarak ~/.ssh/authorized_keys dosyasına eklenir.

2. Manuel Yükleme (Alternatif Yöntem)

Eğer ssh-copy-id komutu çalışmıyorsa, açık anahtarı manuel olarak sunucuya kopyalayabilirsiniz:

  1. Açık anahtarınızın içeriğini kopyalayın:
    cat ~/.ssh/id_ed25519_server_access.pub
  2. Sunucuya bağlanın:
    ssh kullanici@sunucu-ip-adresi
  3. Sunucuda ~/.ssh/authorized_keys dosyasını oluşturun (eğer yoksa):
    mkdir -p ~/.ssh
    touch ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  4. Açık anahtarı authorized_keys dosyasına ekleyin:
    echo "PASTE_ICERIK" >> ~/.ssh/authorized_keys

Adım 3: SSH Sunucu Yapılandırması

Sunucunuzda SSH ayarlarını yapılandırarak anahtar tabanlı kimlik doğrulamayı zorunlu hale getirebilirsiniz. Bunun için /etc/ssh/sshd_config dosyasını düzenleyin:

sudo nano /etc/ssh/sshd_config

Aşağıdaki satırları bulun ve gerekirse değiştirin:

# Parola tabanlı kimlik doğrulamasını devre dışı bırak
PasswordAuthentication no

# Anahtar tabanlı kimlik doğrulamasını etkinleştir
PubkeyAuthentication yes

# Root kullanıcısının doğrudan SSH erişimini engelle (güvenlik için önerilir)
PermitRootLogin no

# Sadece belirli kullanıcıların SSH erişimine izin ver (isteğe bağlı)
AllowUsers kullanici1 kullanici2

Değişiklikleri yaptıktan sonra, SSH servisini yeniden başlatın:

sudo systemctl restart sshd

Adım 4: SSH İstemci Yapılandırması

SSH istemcinizde (yerel bilgisayarınızda) anahtar tabanlı kimlik doğrulamasını kullanmak için ~/.ssh/config dosyasını düzenleyin:

nano ~/.ssh/config

Aşağıdaki yapılandırmayı ekleyin (anahtar adınıza göre değiştirin):

Host sunucu-adi
    HostName sunucu-ip-adresi
    User kullanici
    IdentityFile ~/.ssh/id_ed25519_server_access
    IdentitiesOnly yes

Bu yapılandırma sayesinde, SSH bağlantısı sırasında otomatik olarak belirtilen anahtar kullanılacaktır.


En İyi Uygulamalar ve Güvenlik İpuçları

1. Özel Anahtarı Güvenli Tutun

  • Özel anahtarınızı hiçbir şekilde paylaşmayın ve yedeklemeyi unutmayın.
  • Özel anahtar dosyasının izinlerini sınırlayın:
    chmod 600 ~/.ssh/id_ed25519_server_access
  • Özel anahtarı USB bellek gibi fiziksel bir cihazda saklayın ve gerektiğinde kullanın.

2. Parola (Passphrase) Kullanın

Özel anahtarınızı korumak için bir parola belirleyin. Bu, anahtarın çalınması durumunda bile ek bir güvenlik katmanı sağlar.

3. Anahtar Yönetimi

  • Çoklu anahtarlar kullanın: Farklı sunucular için farklı anahtarlar oluşturun ve yönetin.
  • Anahtarları periyodik olarak yenileyin: Güvenlik standartlarınızı güncel tutun.
  • Anahtarları imzalayın: Kritik sistemler için anahtarlarınızı imzalayarak güvenilirliğini artırın.

4. SSH Agent Kullanımı

SSH agent, özel anahtarlarınızın parola girmeden kullanılmasını sağlar. Aktif hale getirmek için:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_server_access

5. İki Faktörlü Kimlik Doğrulama (2FA) Ekleyin

SSH anahtarlarına ek olarak, sunucunuza Google Authenticator veya YubiKey gibi iki faktörlü kimlik doğrulama yöntemleri ekleyebilirsiniz. Bunun için Google Authenticator PAM modülünü kullanabilirsiniz:

sudo apt install libpam-google-authenticator

Daha sonra /etc/ssh/sshd_config dosyasında aşağıdaki satırı ekleyin:

AuthenticationMethods publickey,keyboard-interactive

Problem Çözme ve Sık Karşılaşılan Hatalar

1. “Permission denied (publickey)” Hatası

Bu hata, genellikle aşağıdaki nedenlerden kaynaklanır:

  • Açık anahtar sunucuya yüklenmemiş: ~/.ssh/authorized_keys dosyasına anahtarın eklendiğinden emin olun.
  • Dosya izinleri yanlış: ~/.ssh dizini ve authorized_keys dosyasının izinlerini kontrol edin:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  • SSH servisi yeniden başlatılmamış: Değişiklikleri uygulamak için SSH servisini yeniden başlatın:
    sudo systemctl restart sshd

2. Anahtarın Kullanılmaması

Eğer SSH, anahtarı kullanmıyorsa, aşağıdaki komutla hata ayıklama yapabilirsiniz:

ssh -vvv kullanici@sunucu-ip-adresi

Bu komut, SSH bağlantısının detaylı loglarını görmenizi sağlar.

3. Anahtarın Süresinin Dolması

Bazı sistemlerde, özel anahtarların süresi dolabilir. Bu durumda, yeni bir anahtar çifti oluşturun ve sunucuya yükleyin.


Otomatikleştirme ve Entegrasyon

1. Docker Konteynerlarında SSH Anahtarları

Docker konteynerlarında SSH anahtarlarını kullanmak için, anahtarları konteynere bağlayabilirsiniz:

docker run -d \
  --name ssh-server \
  -v ~/.ssh/id_ed25519_server_access:/root/.ssh/id_ed25519 \
  -v ~/.ssh/id_ed25519_server_access.pub:/root/.ssh/id_ed25519.pub \
  -p 2222:22 \
  ubuntu:latest

2. Ansible ile Anahtar Dağıtımı

Ansible kullanarak SSH anahtarlarını birden fazla sunucuya dağıtabilirsiniz. Örnek bir playbook:

---
- name: SSH anahtarlarını dağıt
  hosts: all
  become: yes
  tasks:
    - name: Açık anahtarı authorized_keys dosyasına ekle
      ansible.posix.authorized_key:
        user: "{{ ansible_user }}"
        state: present
        key: "{{ lookup('file', '~/.ssh/id_ed25519_server_access.pub') }}"

3. CI/CD Pipeline’larında SSH Anahtarları

CI/CD pipeline’larında (örneğin GitHub Actions) SSH anahtarlarını kullanmak için, özel anahtarı encrypted secrets olarak saklayın ve gerektiğinde kullanın:

- name: SSH ile sunucuya bağlan
  run: |
    eval "$(ssh-agent -s)"
    echo "${{ secrets.SSH_PRIVATE_KEY }}" | ssh-add -
    ssh -o StrictHostKeyChecking=no kullanici@sunucu-ip-adresi "komut"

Sonuç ve Öneriler

SSH anahtar tabanlı kimlik doğrulama, Linux sunucularınızda güvenliği artırmanın ve yönetimi kolaylaştırmanın en etkili yollarından biridir. Bu yöntemi uygulayarak:

✅ Brute-force saldırılarına karşı koruma sağlayabilirsiniz. ✅ Otomatik senaryoları ve CI/CD pipeline’larını daha güvenli hale getirebilirsiniz. ✅ Ekip çalışmalarında parola yönetimini basitleştirebilirsiniz. ✅ Sunucularınıza erişimi daha hızlı ve güvenilir hale getirebilirsiniz.

Özet Adımlar

  1. SSH anahtar çifti oluştur (ssh-keygen -t ed25519).
  2. Açık anahtarı sunucuya yükle (ssh-copy-id).
  3. SSH sunucu yapılandırmasını güncelle (/etc/ssh/sshd_config).
  4. İstemci yapılandırmasını ayarla (~/.ssh/config).
  5. En iyi uygulamaları uygula (parola, izinler, 2FA).
  6. Otomatikleştirme ve entegrasyon için araçları kullan.

SSH anahtarlarını doğru şekilde kullanarak, sistemlerinizin güvenliğini önemli ölçüde artırabilir ve yönetim süreçlerini optimize edebilirsiniz. Unutmayın, güvenlik sadece bir kez yapılması gereken bir şey değil, sürekli olarak güncellenmesi ve iyileştirilmesi gereken bir süreçtir.


Kaynakça ve İleri Okuma

Bu rehberi beğendiyseniz, Linux sunucu güvenliği konusunda daha fazla içerik için blogumu takip etmeyi unutmayın. İyi kodlamalar! 🚀


Bu yazı Mistral ile otomatik oluşturulmuştur.