Şifresiz SSH Bağlantısı Yapma ve Detaylı SSH İşlemleri
Şifresiz olarak iki cihaz arasında SSH bağlantısı yapmak sanılanın aksine oldukça basit bir iştir. Bu yazımızda bir cihaza şifre sormadan SSH bağlantısı yapmak için neler yapılması gerektiğini ve çalışma mekanizmalarını göstereceğiz.
SSH, Secure Shell, ağ hizmetlerinin güvenli olmayan bir ağ üzerinde güvenli şekilde çalıştırılması için kullanılan bir kriptografik ağ protokolüdür.[1] En iyi bilinen uygulaması bilgisayar sistemlerine uzaktan oturum açmak için olanıdır. Güvensiz Telnet bağlantıları yerine, SSH sayesinde cihazlarınızı internet üzerinden güvenli bir şekilde yönetebilirsiniz.
Yazdığınız scriptlerde iki cihaz arasında SSH ile haberleşmeyi sağlarken otomatik giriş için şifre faktörünü ortadan kaldırmak istiyor olabilirsiniz. Hatta sadece cihazlarınıza bağlanırken şifre yazmak istemiyor bile olabilirsiniz. Her ne sebeple olursa olsun SSH bağlantılarında şifre sorulmasını istemiyorsanız iki farklı yöntemle de bunun nasıl mümkün olabileceğini gösterelim.
ssh-copy-id
komutu ile belirli bir hosttan şifre kontrolünü kaldırmassh-copy-id
komutunu kullanmadan manuel olarak anahtarların kopyalanması ve yetkilendirme
İlk olarak meşhur komutumuzu kullanmaya başlamadan önce anahtar çiftleri ve yetkilendirme işlemleri hakkında temel bilgiler edinmek için Modern Şifreleme Yöntemleri (Simetrik & Asimetrik Şifreleme) başlıklı yazımı okumak isteyebilirsiniz;
1. ssh-copy-id
komutu ile şifresiz SSH bağlantısı
ssh-copy-id
komutu, makinemizdeki işlem yapacağımız kullanıcının public keyini, şifre sormasını istemediğiniz cihazdaki hedef kullanıcının ~/.ssh dizininde yer alan authorized_keys dosyasına ekler. Böylece bulunduğunuz makinedeki kullanıcıdan hedef makinedeki kullanıcıya SSH isteği atıldığında, yetkilendirilmiş bir kullanıcı olarak gözükeceğimiz için size şifre sorulmayacaktır. Burası size karışık gelmiş olabilir ama özetlersek; kullanıcınızın public keyi karşı makinenin kullanıcısına eklenir.
Makinemizdeki kullanıcının public keyinin karşı cihazdaki kullanıcıya eklenebilmesi için öncelikle bizdeki ve hedef cihazdaki kullanıcıların bir anahtar çiftinin olması gerekiyor. Bunun için ilk olarak ssh-keygen
komutuyla kullanıcılarda anahtar çiftini oluşturalım. Tüm soruları enter ile geçebilirsiniz.
Şimdi ilk olarak makinemizin public keyinin özetini ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
komutu ile görelim. Şifresiz SSH işlemleriyle bir alakası olmasa da bu özeti doğru makineye bağlanıp bağlanmadığımızı anlamada güvenlik aşaması olarak kullanacağız. Ardından da ssh-copy-id [HEDEF KULLANICI]@[HEDEF IP ADRESİ]
komutu ile belirttiğimiz kullanıcıya şifresiz şekilde bağlanmayı aktif edeceğiz.
NOT: İlk kez SSH ile bağlanacaksanız yukarıda bahsettiğimiz host public key fingerprint doğrulamasını görürsünüz. Eğer karşı cihazın özeti bağlanmak istediğinizde gösterilen özet ile eşleşiyorsa yes
komutu ile onaylayabilirsiniz. Böylece cihazımızın public keyi, bağlanırken kullandığımız karşı cihazdaki root kullanıcısının ~/.ssh dizininde yer alan known_hosts dosyasına eklenir. Bundan sonraki bağlantılarımızda da artık karşı cihaz sizi tanıdığı için doğrulama sorusunu sormaz.
Küçük ve önemli bir nottan sonra asıl kısma geçelim. Test için karşı cihaza ssh [KULLANICI]@[HEDEF IP ADRESİ]
komutu ile SSH atalım. Sizinde göreceğiniz gibi hiçbir şifre sorulmadan bağlantı gerçekleşecektir. Böylece şifresiz SSH bağlantısını ayarlamış olduk. Tabi SSH komutunuzda kullanıcı adı belirtmezseniz (sağdaki resimde olduğu gibi), hangi kullanıcı üzerinden işlem yapıyorsanız karşı tarafta da o kullanıcıya bağlanmaya çalışılır. Farklı bir kullanıcıya (örneğin postgres) SSH ile bağlanmaya çalıştığınızda ise bu kullanıcı için herhangi bir işlem yapmadığımız için şifre sorduğunu göreceksiniz.
Son kısmı özetlersek, bağlanacağınız makinede hangi kullanıcılara SSH atmak istiyorsanız her biri için ssh-copy-id ssh-copy-id [HEDEF KULLANICI]@[HEDEF IP ADRESİ]
komutunu çalıştırmalısınız.
2. ssh-copy-id
komutu kullanmadan şifresiz SSH bağlantısı
Yukarıdaki anlatımda ssh-copy-id
komutu ile kolayca şifresiz SSH bağlantılarını ayarladık. Ama bu komutun mantığını anlamak için gerekli işlemleri manuel yapacağız. Tabi bu işlemlerin makinemizdeki kullanıcının public keyinin karşı cihazdaki hedef kullanıcının authorized_keys dosyasına yazmak olduğunu yeri gelmişken hatırlatalım.
İlk işimiz, makinelerimizde anahtar çiftleri yoksa ssh-keygen
komutuyla anahtarları oluşturmak olsun.
Sırada, kullanıcımızın public keyini alarak hedef cihazdaki kullanıcının authorized_keys dosyasına eklemek var. Bu işlemi aşağıdaki komutla gerçekleştireceğiz
cat ~/.ssh/id_rsa.pub | ssh root@[HEDEF IP ADRESİ] "tee -a ~/.ssh/authorized_keys"
ssh-copy-id komutuyla yaptığımız aynı işlemi manuel olarak yapmış olduk. Şimdi public keyimizin karşı cihazdaki authorized_keys dosyasına eklenip eklenmediğini kontrol edelim.
Tebrikler! Artık cihazlarınız arasında şifresiz olarak SSH bağlantısı yapabilirsiniz. Umarım çalışma mantığını da işlemleri yaparken anlamışsınızdır. Takıldığınız yerler olursa aşağıdaki yorum alanını kullanabilirsiniz.