SSH ile public key authentication

Hp-Ux
 
Sistemlere uzaktan erişim imkanı kullanıcılara ve sistem yöneticilerine büyük kolaylıklar sağlamıştır. Bunu sağlayan çoğumuzun aşina olduğu telnet protokolüdür. Daha güvenli sistemlere geçişle birlikte telnet yerini daha güvenli olan Secure shell(ssh)) a bırakmıştır. Bu tür programlar kimlik denetimi ve kriptolama algoritmalarının kullanımı sebebiyle güvenli olmayan sistemlere(ftp,telnet) göre bağlanma süreleri açısından daha yavaştırlar. Yazımızda SSH protokolünün desteklediği public key kriptografi tabanlı RSA/DSA kimlik denetimi yönteminden bahsedeceğiz.
Temel mantık şöyle; public ve private olmak üzere iki anahtarımız var. Şifrelemede kullanacağımız anahtar public (genel) anahtar ve bu anahtar herkeste olabilir, şifre çözümlemede kullanacağımız anahtar ise özel(private) anahtar ve bunun sadece bizde olması gerekir. Public key kimlik denetiminin mantığı basitçe public key den private key'i çıkarmak. Public key sunucuda authorized_keys dosyasında, private key ise yalnızca kendi makinamızda tutulur.Kullanıcı bağlanmaya çalıştığında istemci sunucuya kullanıcının bağlanma talebinde bulunduğu public key'i bildirir. Sunucu public key'i geçerliliğini kontrol eder. Bunu yaparken 1024 bit rastgele bir sayı üretir ve verilen public key ile şifreler. İstemci kendi private key'i ile sayıyı çözümler, çıkan sonuçtan 128 bit MD5 checksum hesaplar ve bu checksum ı tekrar sunucuya gönderir.Sunucu kendisindeki checksum ile istemcideki checksum ı karşılaştırır ve doğrulama işlemi tamamlanmış olur. Public key authentication ile sisteme kendimizi tanıtmış oluyoruz. Bu bize hem uzaktan çalıştırmak istediğimiz komutlarda (kopyalama,dosya aktarımı vb.) kolaylık sağlıyor, hem de login işlemi sırasında her seferinde şifre girmek yerine daha güvenli ve esnek  bir çözümü seçmiş oluyoruz. Ben DSA kimlik denetim yöntemi üzerinden gideceğim ama RSA algoritmasını uygulamak isterseniz de yazının sonunda  belirteceğim değişiklikleri yaparak kullanabilirsiniz. 
 
DSA ile Kimlik Denetimi
 
İlk yapmamız gereken bağlanmak istediğimiz kullanıcı ile sisteme login olarak ssh-keygen komutu yardımıyla DSA (key) anahtarlarımızı oluşturmak. Aşağıdaki komutla anahtar çiftimizi oluşturuyoz.
 
$ ssh-keygen -t dsa
 
Bu komutu çalıştırdığımızda aşağıdakine benzer bir çıktı alırız;
 
Generating public/private dsa key pair.
Enter file in which to save the key (//.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in //.ssh/id_dsa.
Your public key has been saved in //.ssh/id_dsa.pub.
The key fingerprint is:
79:30:d2:ed:19:a0:c5:6e:aa:23:01:05:87:c6:6e:f3 @
 
3. satırda bize anahtarımızı şifrelemek isteyip istemediğimiz soruluyor. Bu aşamada bir passphrase seçersek, private key imiz istemediğimiz kullanıcıların eline geçse bile passphrase e sahip değillerse bir anlam ifade etmeyecektir. Fakat bu şekilde bağlanmak istediğinizde sistem sizden anahtarınızı şifrelemek için girmiş olduğunuz passphrase i isteyecektir. Böyle bir sorgulama ile karşılaşmak istemiyorsanız “Enter passphrase” aşamasını şifre girmeden geçmelisiniz.
 
$HOME/.ssh/ altında id_dsa.pub isminde public ve id_dsa isminde private key lerimiz oluşmuş oldu. Sistemimizde ./ssh dizininin altını listelediğimizde aşağıdakine benzer bir çıktı aldık.
 
$ ls -al .ssh/        
drwx------       2     test         msm         512   Jun 3 16:11 .
drwx--x--x    55     test         msm        3584 Jun 3 16:11 ..
-rw-------         1     test        msm         736   Jun 3 16:11 id_dsa
-rw-------         1     test        msm        613    Jun 3 16:11 id_dsa.pub
 
 
DSA anahtarlarımız oluşturduk, sıra geldi oluşturduğumuz public key i bağlanmak istediğimiz sisteme transfer etmeye. Burada hangi kullanıcıyla bağlanmak istediğimizi de belirtmemiz gerekiyor. Ben örnek olarak “test” kullanıcını seçiyorum;
 
$ scp id_dsa.pub Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir :./id_dsa.pub
 
Public key imizi karşı tarafa attık. Şimdi bağlanmak istediğimiz sunucuya login olup eğer oluşturulmamışsa .ssh dizini ve içerisinde authorized_keys dosyasını oluşturalım;
 
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ touch authorized_keys
$ chmod 644 authorized_keys
 
Son olarak public key i authorized_keys dosyasının içeriğine ekliyoruz;
$ cat ../id_dsa.pub >> authorized_keys
 
Şimdi bu şekilde istemci makinadan bağlanılacak sisteme ssh @ yapalım.
Karşımızı söyle bir mesaj çıkması gerekiyor;
 
$ ssh   Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir
 
The authenticity of host ' (ip address)' can't be established.  DSA key fingerprint is (long hexadecimal number).  Are you sure you want to continue connecting (yes/no)?
Cevap olarak “yes” dedikten sonra bir kereliğine;
 
Warning: Permanently added '(hostname) (IP address) ' (DSA) to the list of known hosts. mesajını alacağız.
Bağlanılmak istenen sunucuda ./ssh altına baktığınızda known_hosts dosyasının oluştuğunu görebilirsiniz.
 
Son olarak sisteme son bir kez daha ssh yapmamız gerekiyor. Logout, login işlemlerinden sonra artık sisteme şifresiz erişebiliriz.
RSA için yapmamız gereken değişiklikler;
 
Sadece 2 değişiklik yapmamız yeterli.
Anahtar çiftimizi oluştururken aşağıdaki komutu kullanıyoruz;
 
$ ssh-keygen
 
Bu komut sonucunda oluşan dosyaların isimleri farklı;
 
$ ls -al .ssh/        
drwx------       2     test         msm         512   Jun 3 16:11 .
drwx--x--x    55     test         msm        3584 Jun 3 16:11 ..
-rw-------         1     test        msm         736   Jun 3 16:11 id_rsa
-rw-------         1     test        msm        613    Jun 3 16:11 id_rsa.pub
 
Bunların dışında DSA de uyguladığımız aşamaları RSA için de uyguluyoruz.
 

Durdu Burak Topal Tarafından Eklenen Son Makaleler

Yorum ekle

Güvenlik kodu
Yenile