SSH, yani Secure Shell, internet üzerinden makineler arasında güvenli ve özel bir şekilde iletişim kurmanın bir yoludur. Genellikle uzak bilgisayarlara erişmek, komutları çalıştırmak veya dosyaları aktarmak için kullanılır ve tüm bunları güvenli bir şekilde yapar. Bu makalede, SSH’nin ne yaptığını daha basit terimlerle açıklamaya çalışacağız.
İçerik
SSH Nasıl Çalışır:
SSH’nin nasıl çalıştığını anlamak için bilmeniz gereken sadece 3 temel fikir vardır, bunları teknik terimler olmadan tanımlayalım:
Kilitleme ve Anahtarlar: Bir makineye SSH ile bağlanmayı, makineye bir kilit takıp sadece tek bir, benzersiz anahtarla açılabilecek bir kilit yerleştirmek gibi düşünebilirsiniz. Yalnızca doğru anahtara (özel anahtarınıza) sahip olan biri (siz) bunu açabilir. SSH’de, bunlar dijitaldir: bir genel anahtar (herkesin görebileceği) ve bir özel anahtar (sizinle kalması gereken). Genel anahtar (kilit) erişmek istediğiniz sunucuya yerleştirilir, özel anahtar ise sizinle kalır. Genel anahtarı istediğiniz kadar kopyalayabilir ve paylaşabilirsiniz, yeter ki yalnızca özel anahtar sizde olsun.
Tüneller: Anahtarlar eşleştiğinde ve erişim sağlandığında, SSH verilerin güvenli bir şekilde seyahat edebileceği güvenli bir “tünel” oluşturur, tıpkı kimsenin içindeki veriyi göremeyeceği veya erişemeyeceği güvenli bir boru hattı gibi. Bir makineye SSH ile bağlandığınızda, yerel makineniz (bağlandığınız makine) tünelin bir ucu, uzak makine (bağlandığınız makine) ise diğer ucu olur ve komutlar gibi her şeyi bu tünel üzerinden iletebilirsiniz.
Portlar: Burada portları havaalanları gibi düşünebilirsiniz. Her porta bir numara atanır ve farklı türdeki hizmetler veya uygulamalar, tüneller aracılığıyla veri gönderip almak için belirli portları kullanır. Tıpkı bir şehrin yolcu kabul etmek için bir havaalanını, kargo kabul etmek için başka bir havaalanını kullanması gibi, farklı internet hizmetleri de farklı portları kullanabilir. Örneğin, web trafiği genellikle port 80 üzerinden geçerken, e-posta hizmetleri port 25’i kullanabilir. SSH’nin varsayılan olarak kullandığı port 22’dir, ancak bu portu ne olması gerektiğini biliyorsanız değiştirebilirsiniz.
SSH Kullanımı:
Daha ayrıntılı bilgi için buradaki daha spesifik ve derinlemesine kılavuzumuzu inceleyebilirsiniz.
- Anahtarları Oluşturma:İlk olarak, bağlantımızı daha sonra kimlik doğrulamak için kullanacağımız kilit ve anahtar çiftini oluşturalım:
ssh-keygen
Bu komut, yeni bir SSH anahtar çifti oluşturur ve bu anahtar çifti varsayılan konuma ($HOME/.ssh/) kaydedilir. Enter tuşuna basarak işlemi tamamlayabilirsiniz.
- Genel Anahtarı Sunucunuza Kopyalama:Şimdi, oluşturduğunuz kilidi, güvenli bir bağlantı kurmaya çalıştığınız uzak makineye yükleyelim:
ssh-copy-id username@remote_host
username
kısmını kullanıcı adınızla,remote_host
kısmını ise sunucunun adresiyle değiştirin. - SSH ile Bağlanma:Son olarak, iki makine arasında bir tünel kurmak için havalimanına gidelim:
ssh username@remote_host
Şimdi, özel anahtarınızı kullanarak uzak makinedeki kilidi açmış ve yerel bilgisayarınız ile uzak bilgisayar arasında varsayılan port (22) üzerinden güvenli bir tünel başlatmış oluyorsunuz.
Ve işte bu kadar! SSH aracının temel işlevselliği çok basittir, ancak istediğiniz ve uzak makinenin/hizmetin gereksinimlerine bağlı olarak deneyimi özelleştirmek için ek özellikler ekleyebilirsiniz.
.ssh Klasörü:
Kullanıcı dizininizdeki .ssh klasörü, SSH anahtarlarınızın, kilitlerinizin ve yapılandırma dosyalarınızın saklandığı güvenli bir dolap gibidir. İçerdiği öğeler şunlardır:
Özel ve Genel Anahtarlar: Her anahtar bir çift halinde gelir (genel ve özel, kilit ve anahtar). Örneğin, anahtarların varsayılan adı id_rsa’dır, ancak bir id_rsa dosyası ve bir id_rsa.pub dosyası (genel anahtar) olacaktır. .pub dosyasını istediğiniz gibi paylaşabilirsiniz, ancak pub olmayan dosyayı asla paylaşmayın veya açmaya çalışmayın, gerçekten ne yaptığınızı bilmiyorsanız.
Yapılandırma Dosyası: SSH bağlantıları için ayarları belirtebileceğiniz bir dosyadır, örneğin sunucular için kısayol adları veya varsayılan kullanıcı adları. Bu, VSCode kullanmak istiyorsanız da yararlıdır. Yapılandırma dosyasındaki tipik bir bölüm şöyle görünebilir:
Host sunucu_ismi # Bu bağlantı için seçtiğiniz bir takma addır, hatırlaması daha kolay olur.
HostName 1.23.45.0 # Bağlanmak istediğiniz sunucunun gerçek adresi.
User myusername # Sunucudaki kullanıcı adınız.
Port 22 # SSH’nin bağlanması gereken port numarası, genellikle 22. Bunu eklemeden de yapabilirsiniz.
IdentityFile ~/.ssh/my_private_key # Bu bağlantı için özel SSH anahtarınızın yolu.
Bu yapılandırmayla, ssh myusername@1.23.45.0 -p 22 -i ~/.ssh/my_private_key
yazmak yerine sadece ssh hostname
yazmanız yeterli olur.
Yetkilendirilmiş Anahtarlar: SSH’deki authorized_keys dosyası, sisteme yüklenen tüm kilitlerin bir listesi gibidir. Yetkili kullanıcıların özel anahtarlarıyla sunucuya erişim denemesinde bulunmalarına izin veren genel anahtarları içerir. Bir kullanıcı SSH ile sunucuya bağlanmaya çalıştığında, sunucu, kullanıcının sağladığı genel anahtarın authorized_keys dosyasındaki anahtarlardan biriyle eşleşip eşleşmediğini kontrol eder. Eşleşme varsa, bu, sunucunun kullanıcının sorduğu kilidi tanıdığı ve onu açmayı denemesi için sunduğu anlamına gelir. Bu mekanizma, yalnızca yetkili kullanıcıların sunucuya bağlanmaya çalışabilmesini sağlar. Bu dosyaya genellikle elle bir şey eklemeniz gerekmez, ancak eklemeniz gerekiyorsa, yalnızca genel SSH anahtarlarını ekleyin. ssh-copy-id
komutu, genel SSH anahtarınızı uzak sunucudaki authorized_keys dosyasına ekleme sürecini otomatikleştirir. ssh-copy-id username@remote_host
komutunu çalıştırdığınızda, genel anahtarınızı otomatik olarak uzak makinenin authorized_keys dosyasına ekler.