SSH Key Nedir, Birden Fazla Sunucuda SSH Key Yapılandırması

  Linux

Daha önce ssh key yöntemi ile linux sunucular arasında şifresiz bağlantı yapmayı anlatmıştım. Fakat bir kaç kişinin bu işi iki sunucu arasında yapıyoruz da 3 sunucu arasında veya daha fazla sunucularda nasıl yaparız şeklinde soruları olmuştu. Bunun için aynı yöntem üzerinden 3 farklı sunucu için kurulumunu anlatacağım. Bunu daha fazla sunucu üzerinde de uyarlamanız mümkün.

Detaylı bilgiyi daha önceki (sadece 2 sunucu arasında) yaptığım ssh anahtarları anlatımımda bulabilirsiniz.

Kurulum,
İlk olarak linux sunucular arasında ssh key mekanizmasını anlatacağım. Yani diyelimki 5 tane linux sunucumuz var ve bu sunucular arasında şifresiz dolaşmak istiyoruz, örneğin scp ile dosya bırakırken ikide bir şifre girmeyelim veya x sunucudan b sunucumuza ssh atarken sormasın gibi.. Bunun için yapılacaklar çok kolay ve fakat konuyu iyi anlamanızda fayda var.

Örnek olarak 3 sunucumuz var bunların bilgileri aşağıdaki gibi, (Normalde 2 sunucu üzerinden örnek verecektim fakat 3 sunucu için özel bir neden var)
Tüm sunucular üzerinde örnek kullanıcı salih
Kullanıcının home dizini–> /home/salih
1.sunucu –> A Sunucusu –> IP’si 192.168.1.1
2.sunucu –> B Sunucusu –> IP’si 192.168.1.2
3.sunucu –> C Sunucusu –> IP’si 192.168.1.3

Puty, mremote, securecrt tarzı küçük programlar vasıtasıyla sunuculara bağlandığınızı düşünerek tüm sunucularda ssh ile login oluyoruz,

Aşağıdaki komutu çalıştırıyoruz. Bu komutla birlikte anahtar çiftimiz oluşturulacaktır.

Komut kısaca şöyle işliyor,
– İlk olarak anahtar çiftinin oluşturulacağı dizin soruluyor boş geçilirse default olarak kullanıcının home dizini içerisinde .ssh dizini ekleyerek oluşturuyor (ben bu şekilde yapıyorum).
-Sonrasında bu kriptolanan veriye şifre verip vermeyeceğimiz soruluyor. Enter’a basarak bir şifre belirlemezseniz o şekilde devam edecektir, Fakat şifre vermeniz halinde ekstra güvenlik önlemi almış olacaksınız. Tabiki genelde kullanıcılar burada şifre vermeden ilerliyor çünkü amaçları sunucular arası şifresiz erişim olduğu için hem şifresiz erişim sağlayacak bir mekanizma kurmak hemde bunu da şifreye bağlamak saçma geliyor. Fakat şifre verilmesi halinde “ssh agent/ssh ajanı” ismin güzel bir taktiğimiz varki bunu farklı bir makalemde açıkladım güvenliği maksimize etmekle birlikte veri ve sunucu güvenliğini sağlayabiliyoruz.
(Ben örneklerimde şifresiz ilerliyorum fakat şifreli bir şekilde kurulumunu yapmışım gibi sonrasında sunucular arasında bu şifreleri de girmeden ssh agent ile nasıl güvenliği elden bırakmadan hasır altı ederiz onu anlatacağım)

############################# 1. Sunucu üzerinde Yapılacak İşlemler ################################

A Sunucusu üzerinde,

############################# 2. Sunucu üzerinde Yapılacak İşlemler ################################

B Sunucusu üzerinde,

############################# 3. Sunucu üzerinde Yapılacak İşlemler ################################

C Sunucusu üzerinde,

Tüm sunucular üzerinde ssh-keygen ile anahtar çiftlerimizi (id_dsa ve id_dsa.pub) oluşturduk. Public/Genel anahtarımız olan id_rsa.pub dosyası bizim anahtarımız olduğu için her sunucuya birer anahtar vermemiz gerekiyor. Yani hangi sunucuda id_rsa.pub oluşturduysak kendi hariç diğer sunuculara vereceğiz. Akabinde verdiğimiz bu id_rsa.pub dosyasının adını authorized_keys olarak değiştirerek anahtarları bu dosyada toplayacağız.

Sırasıyla 3 sunucumuza da bağlanalım ve aşağıdaki komutları tüm sunucularımız üzerinde uygulayalım,

Önce ilgili dizine gidiyoruz ve anahtar çifti oluşmuşmu ve oradamı kontrol ediyoruz,

############################# 1. Sunucu üzerinde Yapılacak İşlemler ################################

A Sunucusu üzerinde önce ilgili dizinimize gidiyoruz, dosyalar mevcutmu kontrol ediyoruz ve dosya adı karışmasın diye değiştirerek diğer sunuculara transfer ediyoruz/kopyalıyoruz,
Önce anahtarların bulunduğu dizine gidelim ve dosyalar mevcutmu diye kontrol edelim,

Dosyaların mevcut olduğunu gördük, şimdi dosyayı diğer sunuculara atınca ismi karışmasın diye yeniden adlandıralım,

Yeniden adlandırdığımız anahtar dosyamızı önce B Sunucusu’na (2.sunucuya) scp aracılığı ile transfer edelim,

Sonra (3.sunucumuza )C Sunucusu’na scp aracılığı ile transfer edelim,

############################# 2. Sunucu üzerinde Yapılacak İşlemler ################################

B Sunucusu üzerinde ssh ile bağlanıyoruz ve A Sunucusun’daki gibi aynı işlemleri yapıyoruz,

Şimdi dosyanın ismini değiştirelim (B Sunucusuna ait olduğu için ismi karışmasın diye bu şekilde veriyorum)

Şimdi ismini değiştirdiğim B Sunucusu-key dosyasını diğer A Sunucusu ve C Sunucusu’na transfer ediyorum/kopyalıyorum,

Sonra (3.sunucumuza )C Sunucusu’na scp aracılığı ile transfer edelim,

############################# 3. Sunucu üzerinde Yapılacak İşlemler ################################

Son olarak C Sunucusu’nada ssh ile bağlanarak aynı işlemleri tekrarlıyorum,

Dosyanın ismini değiştiriyorum,

Önce A Sunucusuna transfer ediyoruz,

Sonra B Sunucusuna transfer ediyoruz,

#####################################################################################################
#####################################################################################################
#####################################################################################################

Şimdi 3 adet sunucumuzda anahtar çiftlerimizi oluşturduk, birbirleri arasında anahtarlarını dağıttık. Artık bu aşamadan sonra dağıttığımız anahtarlarını authorized_keys haline çevirerek her bir sunucunun public key’lerini ayrı satırlarda yazacağız ve test edeceğiz,

1. Sunucuya bağlanıyoruz ve home dizinine gidiyoruz akabinde aşağıdaki işlemleri yapıyoruz,

2. Sunucuya bağlanıyoruz ve home dizinine gidiyoruz akabinde aşağıdaki işlemleri yapıyoruz,

3. Sunucuya bağlanıyoruz ve home dizinine gidiyoruz akabinde aşağıdaki işlemleri yapıyoruz,

Bu kadar ! Artık 3 sunucumuz birbirleri arasında ssh anahtarları sayesinde iletişim kurabilirler. Mantığı anladığımıza göre 3 değil de daha fazla sunucu üzerinde de bu şekilde kullanmak mümkün.

İşin Özü,
ssh-keygen ile anahtar çiftleri oluşturuluyor ve bunlardan public olan diğer makinelere dağıtılıyor. Farklı makinemiz üzerinde topladığımız public key’leri her biri ayrı satırda olacak şekilde authorized_keys dosyasında topluyoruz ve bitiyor.

Dip Not: Şayet anahtar çiftlerini oluştururken (ssh-keygen komutunu çalıştırdığımızda) kriptolanan key’lere şifre verdiyseniz sunucular arasında bağlantı sağlanırken bu şifre sorulacaktır. Bu kötü birşey değil fakat yine şifre giriyorum işin hamallığı hala devam ediyor diyorsanız ssh-agent metodu ile güzel bir şekilde bunu da atlatabilirsiniz. Buda ekstra güvenlik sağlamamıza yardımcı olacaktır. ssh-agent kurulumu ve kullanımına ait detaylı anlatımı diğer yazılarım üzerinde bulabilirsiniz.

Artık test edebilirsiniz.