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_hostsiçin önerilen izin:644(herkes okuyabilir) authorized_keysveconfigiçin önerilen izin:600(sadece sahibi erişebilir)
⚠️ Önemli Uyarı: SSH sunucusu
StrictModesayarı etkin olduğu için (varsayılan olarak etkindir), ev dizininizin grup ya da dünya yazılabilir olması durumunda bile~/.sshdizini 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_rsaveid_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
.sshdizinini 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_keysdosyası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:



