Private ve Public Anahtarlar
SSH bağlantılarını şifreler haricinde, anahtarlar ile gerçekleştirebiliriz. Bu sayede sunucuların şifrelerini bilmemiz gerekmez. Başka birilerinin sunucumuza giriş yetkisi edinmesi için erişim şifresini kendileriyle paylaşmak yerine, kendilerinin anahtarlarını sisteme eklememiz yeterli olur.
Çalışma Biçimi
SSH anahtarları temel olarak şu prensipte çalışır: Anahtarın iki yarısı bulunur. Birisine private (gizli) anahtar, diğerine public (açık) anahtar denilir. Public anahtarı yüklediğiniz sunucular, ilgili private anahtarı elinde bulunduranlara giriş yetkisi verir. Özetle public anahtarınızı herkesle paylaşabilirsiniz, bu yüzden ismi publictir. Ancak sisteminize tanımadığınız public anahtarlar eklememelisiniz, bu durum tanımadığınız kişilere giriş yetkisi vereceğiniz anlamına gelir.
Benzer şekilde private anahtarınızı kimseyle paylaşmamalısınız. Aksi takdirde public anahtarlarınızın yüklü olduğu bütün sistemlere girebilirler.
Oluşturulan private ve public anahtar çiftleri farklı kriptolama teknikleri kullanır.
Kriptolama Teknikleri ve Anahtar Oluşturma (ssh-keygen
)
ssh-keygen
)OpenSSH, kimlik doğrulama için çeşitli açık anahtar algoritmalarını destekler. Geçmişte RSA ve DSA yaygın olarak kullanılmış olsa da, günümüzde güvenlik ve performans açısından Ed25519 algoritması şiddetle tavsiye edilmektedir. ECDSA da iyi bir alternatiftir. RSA hala kullanılabilir (özellikle eski sistemlerle uyumluluk için), ancak en az 3072 veya 4096 bit anahtar uzunluğu önerilir. DSA ise artık güvensiz kabul edilmektedir ve kullanılmamalıdır.
SSH anahtar çifti (private ve public) oluşturmak için standart araç ssh-keygen
programıdır.
Ed25519 Anahtarı Oluşturma (Önerilen):
-t ed25519
: Anahtar türünü Ed25519 olarak belirtir.-C "..."
: Anahtara bir yorum ekler (genellikle e-posta adresi veya kullanıcı@makine formatında). Bu yorum, anahtarı tanımlamaya yardımcı olur ancak işlevsel bir etkisi yoktur.
RSA Anahtarı Oluşturma (Eski Sistemlerle Uyumlu):
-t rsa
: Anahtar türünü RSA olarak belirtir.-b 4096
: Anahtar uzunluğunu bit cinsinden belirtir (RSA için en az 3072 veya 4096 önerilir).
ssh-keygen
komutu çalıştırıldığında size birkaç soru soracaktır:
Dosya Yolu: Anahtarın nereye kaydedileceğini sorar. Varsayılan yol genellikle kullanıcının ev dizinindeki
~/.ssh/
klasörüdür (örn.~/.ssh/id_ed25519
veya~/.ssh/id_rsa
). Varsayılanı kabul etmek için Enter'a basabilir veya farklı bir yol/isim belirtebilirsiniz.Parola (Passphrase): Özel anahtarınızı korumak için bir parola belirlemenizi ister. Güçlü bir parola belirlemek şiddetle tavsiye edilir. Bu parola, özel anahtarınızın çalınması durumunda bile kullanılmasını engeller. Parola olmadan anahtar oluşturmak için bu adımı boş geçebilirsiniz (Enter'a iki kez basın), ancak bu daha az güvenlidir.
Örnek Ed25519 anahtar oluşturma adımları:
Anahtar çifti oluşturmak istediğimiz belirttikten sonra program bize dosyayı nereye kaydedeceğini sorar, standart yolu kullanıcının ev dizininin altındaki .ssh
dizini'dir.
Anahtar çiftinin yolunu belirttikten sonra, anahtarımızı şifrelemek istiyorsak bize şifresini sorar. Bu adımı boş bırakırsak anahtarımız şifresiz kullanılabilir olur. Bir şifre belirlemenizi şiddetle tavsiye ediyoruz. Böylece özel anahtarınız başkası tarafından çalınsa bile, şifreyi bilmedikleri için kullanamayacaklardır.
Örnek adımlar aşağıdaki gibi görülebilir.
Bu işlemlerin ardından iki dosya oluşur:
id_ed25519
(veya belirttiğiniz isim): Özel (Private) Anahtar. Bu dosyayı gizli tutmalı ve kimseyle paylaşmamalısınız. İzinleri genellikle600
(-rw-------
) olmalıdır.id_ed25519.pub
(veya belirttiğiniz isim.pub
): Açık (Public) Anahtar. Bu dosyanın içeriğini, şifresiz bağlanmak istediğiniz uzak sunuculardaki ilgili kullanıcının~/.ssh/authorized_keys
dosyasına eklemelisiniz. Bu anahtarı başkalarıyla paylaşmanızda genellikle bir sakınca yoktur.
authorized_keys
Dosyası ve İzinler
authorized_keys
Dosyası ve İzinlerUzak sunucuda, bağlanmak istediğiniz kullanıcının ev dizini altında ~/.ssh/authorized_keys
dosyası bulunur. Bu dosya, o kullanıcı olarak sunucuya bağlanmasına izin verilen kişilerin açık (public) anahtarlarını içerir (her anahtar genellikle tek bir satırda yer alır).
Yerel makinenizde oluşturduğunuz .pub
uzantılı dosyanın içeriğini kopyalayıp, uzak sunucudaki ilgili kullanıcının ~/.ssh/authorized_keys
dosyasının sonuna eklemeniz gerekir.
Önemli Dosya İzinleri: SSH anahtar tabanlı kimlik doğrulamanın çalışması için uzak sunucudaki dosya ve dizin izinleri çok önemlidir:
Kullanıcının ev dizini (
~
) grup veya diğer kullanıcılar tarafından yazılabilir olmamalıdır (drwxr-xr-x
veya755
genellikle uygundur)..ssh
dizininin izinleri700
(drwx------
) olmalıdır (sadece sahip okuyabilir, yazabilir, çalıştırabilir).authorized_keys
dosyasının izinleri600
(-rw-------
) olmalıdır (sadece sahip okuyabilir, yazabilir).
Bu izinler doğru ayarlanmazsa, SSH sunucusu güvenlik nedeniyle anahtar tabanlı kimlik doğrulamayı reddedebilir.
Açık Anahtarı Sunucuya Kopyalama (ssh-copy-id
)
ssh-copy-id
)Açık anahtarınızı (.pub
dosyasının içeriğini) manuel olarak kopyalayıp authorized_keys
dosyasına eklemek yerine, ssh-copy-id
komutunu kullanmak daha kolay ve genellikle daha güvenli bir yoldur. Bu komut, belirtilen sunucuya şifre ile bağlanır (eğer şifre tabanlı giriş açıksa) ve yerel makinenizdeki açık anahtarı otomatik olarak uzak sunucudaki doğru authorized_keys
dosyasına ekler, ayrıca gerekli dizin ve dosya izinlerini de ayarlamaya çalışır.
Komut sizden uzak sunucudaki kullanıcının şifresini isteyecektir. Başarıyla tamamlandıktan sonra, artık o sunucuya şifre yerine SSH anahtarınızla (ve eğer belirlediyseniz anahtar parolanızla) bağlanabilirsiniz.
ssh-copy-id
komutu, anahtar zaten authorized_keys
dosyasında varsa tekrar eklemez. -n
seçeneği ile kopyalama işlemini yapmadan sadece deneme (dry-run) yapabilirsiniz.
Last updated