SSH Key Yapılandırması

How to Create an SSH Key - KeyCDN Support

Ön Gereksinimler

  • Yerel makinenize erişim
  • Uzak makinenize erişim
  • SSH bağlantısı için uygun bir terminal (Putty, XSHELL vb.)

ssh-keygen nedir?

ssh-keygen, çeşitli şifreleme teknikleri kullanılarak güvenli olmayan ağlar üzerinden uzak bilgisayarlar arasında güvenli kabuk oturumları oluşturmak için kullanılan Unix, Unix benzeri ve Microsoft Windows bilgisayar sistemlerinde bulunan Güvenli Kabuk protokol paketinin standart bir bileşenidir. Sunucuya  bağlanmanın en güvenli yollarından bir tanesi SSH Key kullanmaktır. SSH key ile makinaya parolasız bağlanılabilir. SSH konfigürasyon dosyasındaki ayarları değiştirerek, makinaya sadece ssh key ile bağlanılması sağlanılabilir. Bu durumda parola ile bağlanılması tamamen engellenmiş olur. Eğer Amazon vb. cloud sistemlerinde bir linux makina kullandıysanız. Varsayılan olarak bir key kullanılarak bağlanıldığını görebilirsiniz. 

ssh-keygen nasıl çalışır?

Makina üzerinse openssh yüklü olması gerekir. Yüklü olan sistemlerde ssh key oluşturduğumuzda varsayılan olarak Public ve Private olmak üzere iki key oluşur. Public Key bağlanmak istediğiniz sunucuya yüklenir. Private Key ise bağlanacağınız bilgisayarda saklanır. Linux otomasyon araçlarında genelde ssh-key kullanılmaktadır. Yani yüzlerce makina yönetiliyor ise, private key olan makina çok iyi korunmadır.

ssh-key oluşturmak

Makinaya bağlandıktan sonra, terminal ekranında ssh-keygen komutu ile ssh key oluşturabiliriz.

ssh-keygen

 Komutu çalıştırdıktan sonra, ilk olarak key'leri hangi yol üzerinde oluşturacağını soracaktır. Eğer herhangi bir yol belirtmeyip varsayılan olarak bırakırsanız, kullanıcının ev dizininde gizli bir .ssh adında dizin oluşacaktır. İkinci soracağı şey ise önemli olan Passphrase (Parola) kısmıdır. Passphrase'yi gizli anahtar parolası diyebiliriz. Eğer passphrase verirseniz bu ssh anahtarının kullanıldığı her yerde, passphrase belirtmeniz gerekir. Yani kapıyı kilitlediniz, anahtarıda bir kasaya koyup kilitlediğinizi  düşenebiliriz. Boş bırakırsanız sadece SSH Key dosyası ile erişim sağlayabilirsiniz. Ancak parola ele geçirirse, key dosyasını eline geçiren birisi sadece dosyayı kullanarak erişimi sağlayabilir. Parola kullanmanız ve girdiğiniz parolayı unutmayınız. Örnek olması adına varsayılan ayarları kullanarak Enter tuşuna basarak devam ediyorum.

Şimdi keylerin durumunu kontrol etmek için ilk olarak keylerin olduğu dizine gidelim.

cd ~/.ssh/

file komutu ile dosya hakkında daha fazla bilgi alarak keyleri doğruluyorum.

-f parametresiyle oluşturacağımız anahtar için isim belirleyebiliriz. For example;

ssh-keygen -f mehmet 

ssh-key algoritma ve boyut seçimi

Biraz önce anahtar oluşturduğumuz zaman varsayılan olarak bırakmıştık. Varsayılan olarak anahtar oluşturduğumuz zaman bize RSA algoritmasında 2048 boyutunda anahtar oluşturdu. Şimdi ise kullanımı yaygın ve desteklenen algoritmaları inceleyelim.

rsa

Eski bir algoritma olan RSA, güvenliği tam sayıları çarpanlarına ayırmanın algoritmik zorluğuna dayanan bir tür açık anahtarlı şifreleme yöntemidir.  Varsayılan olarak  2048 bit oluşur, ancak 4096 daha uygun bir seçenek olacaktır. Birçok SSH client tarafından desteklenen RSA uzun vadede daha az güvenilir olarak nitelendirilmekte. Aşağıdaki komut satırı ile 4096 bit bir RSA key oluşturabilirsiniz.

ssh-keygen -t rsa -b 4096

ecdsa

Kriptografide Eliptik Eğri Dijital İmza Algoritması ( ECDSA ), eliptik eğri şifrelemesi kullanan birçok çeşit Dijital İmza Algoritması (DSA) sunar. Amerika Birleşik Devletleri tarafından günümüzde kullanılan standardı ifade etmektedir. Güncel uygulamalar için oldukça güvenilirdir.  256, 384 ve 521 bit olarak  3 anahtar boyutunu ve güncel bir çok SSH client tarafından desteklenmektedir. Aşağıdaki komut satırı ile 521 bit bir ECDSA key oluşturabilirsiniz..

ssh-keygen -t ecdsa -b 521

ed25519

Açık anahtarlı şifrelemede Edwards-eğrisi Dijital İmza Algoritması, bükülmüş Edwards eğrilerine dayanan bir Schnorr imzası varyantı kullanan bir dijital imza şemasıdır. Güvenlikten ödün vermeden mevcut dijital imza şemalarından daha hızlı olacak şekilde tasarlanmıştır. OpenSSH tarafından oluşturulmuş yeni bir algoritma olduğu için ilerleyen zamanlarda kullanmak daha doğru olacaktır. Aşağıdaki komut satırı ile bir ED25519 key oluşturabilirsiniz.

ssh-keygen -t ed25519

ssh-key kopyalamak

Keyleri oluşturduktan sonra, artık public keyimizi kopyalayabiliriz. Bunun için ssh-copy-id komutunu kullanacağız.

ssh-copy-id usurname@remote-ip-address

Görseldeki gibi ssh-copy-id komutunu kullanarak karşımızdaki makina kullanıcı adı ve ip adresini yazarak komutu çalıştırdık. Akabinde karşı makinanın parola bilgisini girerek bize çıktıda anahtarın kopyalandığı bilgisini verdi.

Bu kısımda dikkat etmemiz gereken bir durum var. Eğer karşı makina varsayılan olarak farklı bir port kullanıyor ise bunu aşağıdaki gibi dinlediği portu girerek belirtmeniz gerekir.

ssh-copy-id -p 2222 usurname@remote-ip-address

Eğer birden fazla public anahtarınız var ise veya farklı bir durumdan kopyalama gerçekleştiremez iseniz bunu -i seçeneği ile seçebilirsiniz. Anahtarın bulunduğu dizinde iken aşağıdaki gibi komut satırını yürütmeniz yeterlidir.

ssh-copy-id -i mehmet.pub usurname@remote-ip-address 

public anahtarlar uzak makinanın ev dizinine kopyalanır. Eğer kullanıcının ev dizini yok ise hata alırsınız. 

authorized_keys dosyası

Uzak makinanın kullanıcı dizininde .ssh dizininin içeriğini listelediğimiz zaman anahtarlar dışında authorized_keys dosyası olacaktır. 

Makina erişimleri için public yani açık anahtarınızın bağlantı kuracağınız uzak makinada kayıtlı olması gerekmektedir.  Aksi durumda bağlantı isteğiniz reddedilecektir. Kayıt işlemini bir arayüz üzerinden gerçekleştirmenin yanı sıra doğrudan kayıt işlemi de yapılabilmektedir. Aslında daha basit anlamak için, ssh-keygen komutu ile ürettiğimiz public anahtar ile birebir aynıdır. authorized_keys tanımlama için ssh-copy-id  aracını kullanmamız yeterlidir. Unutmayın uzak makinada authorized_keys dosyası silinirse bağlantı sağlanılamaz.

ssh-key ile makinaya bağlanmak

Artık tek yapmamız gereken karşı makinaya bağlanmaktır. Bunun için ssh komutunu kullanmamız yeterlidir. Biz yukarıda herhangi bir passphrase belirtmediğimiz için herhangi bir parola sormadan bağlantıyı gerçekleştirecektir.

ssh username@remote-ip-address 

Eğer uzak makina da aynı kullanıcı adı mevcut ve public key var ise kullanıcı adı yazmadan da bağlantı sağlayabilirsiniz.

ssh remote-ip-address 

Key sadece o kullanıcıya bağlanmanızı sağlar. Makina üzerinde farklı bir kullanıcıya public anahtarı kopyalamadığınız sürece  bağlantı gerçekleşmez. 

ssh-key ile Windows makinadan bağlanmak

Windows makinadan, powershell veya komut satırını açalım. Açılan pencerede  ssh-keygen komutu ile ssh key oluşturalım.

Şimdi anahtarları varsayılan olarak oluşan klasöre giderek kontrol ediyorum. 

Anahtarlar oluştuğuna göre artık hedef makinaya public anahtarımızı kopyalayabiliriz. Bunun için scp aracını kullanabiliriz. 

scp varsayılan olarak dosyanın üstüne yazmaktadır. Eğer hedef makina üzerinde kullanıcıda farklı public anahtar var ise hepsi gidecektir.

Artık tek yapmamız gerek ssh komutunu kullanarak bağlanmak.

sadece key ile bağlanmak

Daha güvenli bir erişim için uzak makinalara parola ile bağlanılmasını engelleyebiliriz. Bu ayarları uyguladığımız zaman hiç bir kullanıcı makinaya parola girerek bağlanamaz. Yani sadece key ile bağlanılabilir. Bunun için öncelikle ssh konfig dosyasında parola doğrulamasını gösrselde ki gibi yorum satırını kaldırıp no yazarak değiştiriyorum.

sudo vi /etc/ssh/sshd_config 

Dosyayı kayıt edip çıkalım.

:wq!

Şimdi ssh servisini restart edelim.

sudo systemctl restart ssh

Artık parola ile bağlanmaya çalıştığınızda aşağıdaki hatayı alacaksınız.

Bunun dışında 3 parti uygulamalar ile dosya aktarımı yapmak isterseniz, sizden key ve var ise passphrase bilgileri isteyecektir.

Şimdi tekrar private anahtarımın olduğu sunucudan bağlanmaya çalışalım. Başarılı bir şekilde bağlandığını görebiliriz.

ssh username@remote-ip-address 

ssh-key izinler

Anahtarınızı sadece sizin okuyabileceğiniz şekilde dizin ve dosya izinleri ayarlamanız güvenlik açısından önemlidir. Uzak ve lokal makinada aşağıdaki izinleri uygulamanız önerilir.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/*

ssh-key bazı opsiyonlar

  • -f File Anahtar oluşturulurken isim tanımlamak için kullanılır
  • -t Type Anahtar tipini belirlemekte kullanılır. Örnek, ssh-keygen -t rsa anahtarı vb.
  • -b Bits Kullanılmak istenen bit sayısını belirtir. Ön tanımlı bit genişliği algoritmaya göre değişiklik gösterebilir.
  • -i Input SSH-Keygen var olan bir anahtara erişim istediğinde dosyanın ilişkilendirilmesi için kullanılır.
  • -R known_hosts içerisindeki tüm hostname tanımlamalarını siler.
Blog'a Dön