SSH Key Nedir, Nasıl Oluşturulur ve Nasıl Kullanılır?

SSH bağlantısı sağlayacağımızda eğer hedef sunucu parola ile korunuyorsa (ki korunmalıdır ama korunmadığı durumlara şahit olduğumdan belirtmem gerektiğini hissettim), her bağlantı kuracağımızda parolayı tekrar yazmamız gerekmektedir. Örneğin; eğer bağlantı sağladığınız sunucu sayısı 10 ve üzeri ise, her birinde de çok farklı şifreler tercih (canınızın yanmaması için etmelisiniz) ediyorsanız; ya bir password manager (Bitwarden, Enpass vb.) kullanmanız ya da hepsini hatırlıyor olmanız gerekir. İşte her bağlantıda tekrar tekrar farklı şifreler girmek ve hatırlamakla uğraşmamak için bir SSH anahtarı oluştururuz ve bu anahtar bize ait parmak izi niteliğinde olur.

Artık bu anahtarı tanıttığımız sunucular bize şifre sormazlar çünkü parmak izi ile doğrulama yapmışızdır. Parmak izimizin güvenliği sağlamak için şifre belirleyebiliriz. Biz zaten şifre girmekten sıkıldık vs. diyorsanız; eskiden 938427 şifre hatırlamak ya da arayıp bulmak yerine bunu tek bir şifreye indirgemiş olursunuz ve bu opsiyonel bir özelliktir.

İhtiyacın nereden doğduğu ve nasıl çözüm olduğu kısımlarını tamamladığımıza göre artık devam edebiliriz. Bu arada parola yönetimi için dahili özelliklere sahip iTerm(https://iterm2.com/) gibi terminaller mevcuttur, tek bir anahtar ile tüm sunuculara girme fikri size çok güvenli gelmediyse bu özelliklere sahip terminaller tercih edebilirsiniz.

Anahtar oluştururken bir algoritma tercih etmeliyiz ve bu tercih ettiğimiz algoritmanın hem bağlantı sağlayacak cihaz (client) hemde bağlanılacak sunucu tarafından destekleniyor olmalıdır. Ben anlatımı ED25519 üzerinden yapacağım (Ref: linux-audit.com/using-ed25519-openssh-keys-instead-of-dsa-rsa-ecdsa/). DSA’lar hakkında ayrıntılı bilgi için en.wikipedia.org/wiki/Digital_Signature_Algorithm sayfasından başlayabilirsiniz.

Hadi bitirelim şu işi 🙂 Şimdi yeni bir terminal açıyoruz ve ssh-keygen kullanarak anahtarımızı oluşturacağız.

ssh-keygen -t ed25519 -C “CompanyMacbookPro”

Burada -C sonrasında oluşturacağımız ssh key için bir comment yazıyoruz. Ben birden fazla cihaz kullandığımdan bu kısıma cihazı tanımlayıcı birşeyler yazmayı tercih ediyorum. Dilerseniz bu kısma ad-soyad, e-posta adresiniz vs. yazabilirsiniz. Sizin ve bağlanacağınız sunucular için tanımlayıcı nitelikte olması yeterli.

Şimdi bize anahtarı nereye kaydedeceğimiz sorulur. Eğer başka bir nedenle anahtar oluşturmuyorsanız Enter diyip varsayılan pathi kullanmalısınız.

Enter file in which to save the key (/home/YourUser/.ssh/id_ed25519):

Sonrasında bizden bu anahtar için bir parola belirtmemiz istenir. Bu opsiyoneldir, bir parola belirlemek zorunda değilsiniz. Eğer bir parola belirlemezseniz bu ssh keyi kullanarak bağlantı sağlayacağınızda ssh key için şifre sorulmaz. Bu güvenli değildir, o nedenle bir parola belirlemenizi öneririm. Her sunucu için farklı parolalar girmektense ssh key için bir parola girmek daha mantıklıdır.

Enter passphrase (empty for no passphrase):

Eğer parola belirlediyseniz “Enter same passphrase again:” dedikten sonra tekrar doğrulamanızı isteyecek ve sonrasında anahtarı oluşturacaktır.

Şimdi artık anahtarımızı ürettiğimize göre uzak sunucuya bu anahtarları tanımlayabiliriz. Bu aşamada tam olarak yapacağımız şey şu; public anahtarımızı uzak sunucudaki authorized_keys altına ekleyeceğiz. Böylelikle sunucu bizim anahtarımızı gördüğünde ben bu istemciyi tanıyorum diyip şifre sormadan içeri alacaktır.

Normal ssh bağlantısı yaptığımız komutu yani örneğin;

ssh user@ServerIP -p 5642

ssh kısmını ssh-copy-id olarak değiştiriyoruz ve

ssh-copy-id user@ServerIP -p 5642

haline getiriyoruz ve operasyon başlıyor;

The authenticity of host ‘ServerIP’ can’t be established.
ECDSA key fingerprint is …
Are you sure you want to continue connecting (yes/no)?

yes diyoruz ve sonrasında terminal bizden RemoteServer’daki şifremizi isteyecektir. Bu şifre SSH Key şifreniz değil, normalde bağlanırken kullandığınız ssh user password olmalıdır.

Number of key(s) added: 1
Now try logging into the machine, with: “ssh user@ServerIP -p 5642” and check to make sure that only the key(s) you wanted were added.

Böylelikle artık public anahtarınız sunucuya yüklenmiş oldu ve şifreleri hatırlamaktan ve girmekten kurtuldunuz 🙂

Oluşturduğumuz key’i dilerseniz Gitlab, Github gibi platformlarda da authorized keys kısımarına ekleyip her seferinde kullanıcı doğrulama dertlerinden kullanabilirsiniz.