~/.ssh Dizini: Dosyalar, İzinler ve Düzen (OpenSSH Kılavuzu)

SSH bağlantı sorunlarını giderirken ilk kontrol edilmesi gereken yer ~/.ssh dizinidir. Bu makalede SSH dizinindeki dosyaların görevleri, doğru izin ayarları ve istemci/istemci-sunucu farkları detaylı olarak açıklanmaktadır.

L
Linuxize
6 görüntülenme
~/.ssh Dizini: Dosyalar, İzinler ve Düzen (OpenSSH Kılavuzu)

Giriş

SSH anahtarlarını yeni bir bilgisayara kopyaladığınızda, yedekten geri yükleme yaptığınızda ya da dizin sahipliğini değiştirdiğinizde bağlantı kurulamıyorsa, ilk kontrol edilmesi gereken yer ~/.ssh dizinidir. OpenSSH, bu dizini özel ve genel anahtarlarınızın, güvenilir sunucu kayıtlarının ve her sunucuya özel bağlantı ayarlarınızın depolandığı yer olarak kullanır.

~/.ssh Dizini Nerededir ve Nasıl Oluşturulur?

~/.ssh dizini kullanıcının ev dizini içinde yer alır. OpenSSH araçları, bir anahtar oluşturduğunuzda ya da ilk kez bir sunucuya bağlandığınızda bu dizini otomatik olarak oluşturur. Dizin konumunu doğrulamak için aşağıdaki komutu çalıştırın:

ls -ld ~/.ssh

Çıktı örneği:

drwx------ 2 sara sara 4096 Mar  4 14:22 /home/sara/.ssh

Burada sara dizinin sahibi olup, rwx------ izinleri 700 moduna karşılık gelir. Bu izinler dizinin sahibine tam erişim verirken diğer tüm kullanıcıları engeller. OpenSSH, dizin içinde yer alan her dosyanın gizli olmasını zorunlu kılmaz ancak grup ya da dünya yazma izinleri authorized_keys dosyasının reddedilmesine neden olabilirken, özel anahtar izinlerinin gevşek olması da istemcinin bu anahtarı görmezden gelmesine yol açabilir.

Temel İzin Kuralları

  • Dizin için önerilen izin: 700 (sadece sahibi erişebilir)
  • Özel anahtarlar için önerilen izin: 600 (sadece sahibi okuyabilir/yazabilir)
  • Genel anahtarlar ve known_hosts için önerilen izin: 644 (herkes okuyabilir)
  • authorized_keys ve config için önerilen izin: 600 (sadece sahibi erişebilir)

⚠️ Önemli Uyarı: SSH sunucusu StrictModes ayarı etkin olduğu için (varsayılan olarak etkindir), ev dizininizin grup ya da dünya yazılabilir olması durumunda bile ~/.ssh dizini doğru izinlere sahip olsa dahi bağlantı reddedilebilir. Bu nedenle ev dizininizin izinlerini de kontrol etmelisiniz:

chmod go-w ~

~/.ssh Dizini İçindeki Dosyaların Görevleri ve İzinleri

1. Özel ve Genel Anahtarlar

Bir anahtar çifti oluşturduğunuzda ssh-keygen komutu aşağıdaki dosyaları ~/.ssh dizinine yerleştirir:

  • id_ed25519 - Özel anahtar (sadece oluşturulduğu makinede kalmalı ve asla paylaşılmamalıdır)
  • id_ed25519.pub - Genel anahtar (diğer makinelere kopyalanabilir, barındırma platformlarının panellerine yapıştırılabilir)
  • id_rsa ve id_rsa.pub - Eski sistemlerde kullanılan RSA anahtarları (OpenSSH bu isimleri otomatik olarak tanır)

Özel anahtarların izinleri 600 olmalıdır. Eğer grup ya da diğer kullanıcılar tarafından okunabilir durumdaysa OpenSSH bu anahtarı kullanmayı reddeder. Genel anahtarlar ise 644 izinlerine sahip olabilir.

Yeni anahtar oluştururken Ed25519, RSA'ya göre daha küçük boyutlu ve daha hızlı kimlik doğrulaması sağladığı için tercih edilmelidir:

ssh-keygen -t ed25519 -C "kullanici@etkinlik"

2. authorized_keys

Sunucu tarafında, ~/.ssh/authorized_keys dosyası bu kullanıcı hesabına giriş izni verilen genel anahtarları içerir. Her satır bir tam genel anahtarı temsil eder:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE2... kullanici@bilgisayar
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgs... kullanici@dizustu

authorized_keys dosyasının izinleri 600 olmalıdır ve sadece hesap sahibi tarafından okunabilir/yazılabilir durumda olmalıdır. Ayrıca, SSH sunucusu StrictModes ayarı etkin olduğu için ev dizininizin izinleri de doğru olmalıdır.

Bir genel anahtarı sunucuya kopyalamak için ssh-copy-id komutunu kullanın:

ssh-copy-id kullanici@sunucu-ip-adresi

Bu komut, anahtarı authorized_keys dosyasına ekler ve zaten var olan anahtarları korur.

3. known_hosts

~/.ssh/known_hosts dosyası daha önce bağlandığınız sunucuların anahtarlarını kaydeder. İlk kez bir sunucuya bağlandığınızda OpenSSH sunucu parmak izini gösterir ve onaylamanızı ister. Onayladıktan sonra anahtar bu dosyaya eklenir ve gelecekteki bir değişiklikte uyarı verir.

Bir sunucunun anahtarını kontrol etmek için:

ssh-keygen -F sunucu-ip-adresi

Eğer bir sunucu yeni bir anahtar aldıysa (örneğin yeniden yüklenme sonrası), eski girişini silmek için:

ssh-keygen -R sunucu-ip-adresi

known_hosts dosyasının izinleri genellikle 644 olur ancak paylaşılan bir makinedeyseniz 600 olarak ayarlayabilirsiniz.

4. config

~/.ssh/config dosyası, her sunucuya özel kısayollar ve ayarlar içerir. Örnek bir yapılandırma:

Host calisma-sunucusu
    HostName example.com
    User kullanici
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_calisma
    IdentitiesOnly yes

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

Bu yapılandırma ile ssh calisma-sunucusu komutu example.com adresine port 2222 üzerinden bağlanır. Host * bloğu ise tüm sunucular için varsayılan ayarları içerir.

config dosyasının izinleri 600 olmalıdır ve diğer kullanıcılar tarafından okunamaz durumda olmalıdır.

SSH İzinlerini Sıfırlama

Dosyaları kopyaladıktan veya dizini yedekten geri yükledikten sonra izinler değişmiş olabilir. Standart izinleri sıfırlamak için aşağıdaki komutları çalıştırın:

chmod 700 ~/.ssh
find ~/.ssh -maxdepth 1 -type f -name 'id_*' ! -name '*.pub' -exec chmod 600 {} +
find ~/.ssh -maxdepth 1 -type f -name '*.pub' -exec chmod 644 {} +

for file in authorized_keys config; do
    [ -e "$HOME/.ssh/$file" ] && chmod 600 "$HOME/.ssh/$file"
done

[ -e ~/.ssh/known_hosts ] && chmod 644 ~/.ssh/known_hosts

İstemci ve Sunucu Düzeni Farkları

~/.ssh dizini, bir makinenin istemci ya da sunucu olarak çalışmasına bağlı olarak farklı dosyalar içerebilir.

Tipik bir istemci dizini:

ls ~/.ssh
# Çıktı: config id_ed25519 id_ed25519.pub known_hosts

Bu istemci, bir anahtar çifti, bağlantı yapılandırması ve bilinen sunucuların kayıtlarını içerir.

Tipik bir sunucu dizini:

ls ~/.ssh
# Çıktı: authorized_keys

Sunucu hesabı, sadece anahtar tabanlı girişleri kabul etmek için authorized_keys dosyasına ihtiyaç duyar. Bir makine hem istemci hem de sunucu olarak çalışabilir. Örneğin, iş istasyonunuz hem giden bağlantılar için özel anahtarları kullanabilir hem de gelen SCP aktarımları için authorized_keys dosyasını tutabilir.

SSH Bağlantı Sorunlarını Giderme

1. Özel Anahtar İzin Hatası

Hata: Permissions 0644 for '~/.ssh/id_ed25519' are too open

Çözüm: Özel anahtarın grup ya da diğer kullanıcılar tarafından okunabilir olduğunu gösterir. Aşağıdaki komutu çalıştırın ve tekrar deneyin:

chmod 600 ~/.ssh/id_ed25519

2. Ev Dizini Sahiplik veya İzin Hatası

Hata: Authentication refused: bad ownership or modes for directory /home/sara

Çözüm: OpenSSH tüm yolu kontrol eder. Ev dizininizin grup yazılabilir olması başka bir kullanıcının .ssh dizinini değiştirmesine izin verir. Sunucuda aşağıdaki komutu çalıştırın:

chmod go-w ~

3. Genel Anahtar Kopyalandıktan Sonra Giriş Başarısızlığı

Hata: Genel anahtar kopyalandı ancak giriş hala başarısız oluyor.

Çözüm: Anahtarın authorized_keys dosyasına eklenip eklenmediğini ve üzerine yazılmadığını kontrol edin. Parmak izlerini karşılaştırın:

# İstemci tarafında
ssh-keygen -lf ~/.ssh/id_ed25519.pub

# Sunucu tarafında
ssh-keygen -lf ~/.ssh/authorized_keys

Sıkça Sorulan Sorular

1. ~/.ssh dizinini farklı bir yola taşıyabilir miyim?

Cevap: Evet, ancak yeni yolu yapılandırmanız gerekir. İstemci tarafında -i seçeneğini kullanabilir ya da her sunucu için IdentityFile ayarlayabilirsiniz. Sunucu tarafında ise /etc/ssh/sshd_config dosyasında AuthorizedKeysFile ayarını değiştirin. Varsayılan düzeni korumak genellikle daha basittir.

2. ~/.ssh dizinini yedeklemek güvenli midir?

Cevap: Genel anahtarlar serbestçe yedeklenebilir. config ve known_hosts dosyaları hesap adlarını ve sunucu adreslerini açığa çıkarabilir, bu nedenle bu yedekleri özel tutun. Özel anahtarları şifreler gibi ele alın: yedeği şifreleyin ve asla genel bir bulut depolama hizmetinde ya da Git deposunda saklamayın.

3. OpenSSH ev dizini izinlerine neden önem verir?

Cevap: Ev dizininiz grup yazılabilir durumdaysa başka bir kullanıcı ~/.ssh dizinini kendi diziniyle değiştirebilir. Bu saldırı sınıfını önlemek için OpenSSH, çok izinli bir yoldan erişilebilen ~/.ssh dizinini kullanmayı reddeder.

Sonuç

~/.ssh dizininde dosya izinlerine dikkat etmek, SSH bağlantı sorunlarının çözümünde ilk adımdır. Dizin için 700, özel anahtarlar ve authorized_keys için 600, genel anahtarlar ve known_hosts için 644 izinlerini kullanın. Dosyaları kopyaladıktan veya yedekten geri yükledikten sonra bu izinleri kontrol etmek iyi bir uygulamadır.

İlgili okumalar için şu rehberlere göz atın:

Kaynak

Linuxize