Secure Socket Shell ya da kısa adıyla SSH bir bilgisayarın diğer bir bilgisayara internet gibi güvensiz bir ağ üzerinden güvenli bir bağlantı yapmayı sağlamaktadır. SSH uygulama katmanı protokolüdür ve OSI modelinin 7. katmanıdır. Erişilmek istenen cihaza fiziki bir erişim mümkün olmadığında cihaza bağlanmak için kullanılan yöntemlerden bir tanesidir. Bu da kullanıcılara sunucuyu uzaktan kontrol etme şansı tanımaktadır. İlk olarak 90’lu yılların ortasında çıkan protokol yine bir uygulama katmanı olan ancak veri transferini şifresiz bir şekilde gerçekleştiren. Telnet yerine kullanılmak için tasarlandı. Şifrelemenin olmaması verinin internet üzerinden düz metin şeklinde akmasına neden olmaktadır. Bu da üçüncü tarafların packet sniffing gibi çeşitli yöntemlerle veri transferini izlemesine olanak sağlamaktadır. Bağlanılan cihaz ile uzak makine arasında kalan bir kullanıcı tüm transferi gözlemleyebilmektedir. 

SSH Nedir? Ne İşe Yarar?

SSH iki cihaz arasında şifreli bir şekilde veri transferi yapmayı sağlamaktadır. Bu sayede veri başkaları tarafından ele geçirilse bile şifreyi açacak olan anahtar olmadığında tüm veri kullanılmaz halde olmaktadır. SSH ile ne kadar veri transfer edildiği ve bunun ne kadar gönderildiği görülebilmektedir. Ancak hangi verilerin gönderildiği görülememektedir. Protokol genel olarak istemci sunucu modeli ile çalışmaktadır. Bir cihaza SSH istemcisi diğer cihaz ise SSH sunucusu olarak çalışmaktadır. HTTPS ya da uzun adıyla Hyper Text Transfer Protocol Secure de veriyi şifreleyen bir diğer protokoldür. Ancak SSH’tan farklıdır. HTTPS ile internet tarayıcıları siteleri gösterebilmek için sunucular ile konuşmaktadır. SSH ise iki cihaz arasıda veri değişimi ya da iletişim için bir alan oluşturmaktadır. 

SSH sunucusuna bağlanıldığında kullanıcı bir shell’in içerisinde yer almaktadır. Bu shell, Linux terminal shell’i ya da Windows komut satırı shell’i olabilmektedir. Terminal ya da komut satırı kullanıldığında işletim sistemi ile iletişime geçilmektedir. SSH ile ise uzaktaki işletim sistemleri ile de iletişime geçmek mümkün hale gelmektedir. Bu yöntemle veri, komut, metin ya da SFTP kullanarak dosya gönderilebilmektedir.

ssh nasıl çalışır

SSH Nasıl Çalışır?

SSH ile gönderilen veri bir paket serisine dönüştürülmektedir. Herhangi bir paket transferinde olduğu gibi ilk başta daha az alan bulunmaktadır. Bir paket Packet Length, Padding Amount, Payload, Padding ve Mesage Authentication Code olmak üzere 5 farklı bölümden oluşmaktadır. Packet Lenght paketin ne kadar büyük olduğunu göstermektedir. Sonraki byte olan Padding Amount ise Padding değerini vermektedir. Payload kısmında ise verinin kendisi yer almaktadır. Payload’dan sonra şifrelemeyi daha güçlü hale getirmek ve veriyi görmeyi zorlaştırmak için rastgele byte’lar bulunmaktadır. Buna ise Padding adı verilmektedir. Son olarak Message Authentication Code ise veri güvenliğini doğrulamayı sağlamaktadır. 

Veri paketinde Payload kısmı standart sıkıştırma algoritmaları kullanılarak sıkıştırılabilmektedir. Packet lenght ve authentication code haricinde tüm paket şifrelenmektedir. Şifreleme işlemi tamamlandıktan sonra sunucuya gönderilir. Sunucu şifreyi çözer, sıkıştırılmış payload’ı açar ve veriyi ortaya çıkarır. Bu işlem bağlantı üzerinden gönderilen her bir paket için tekrar edilmektedir. 

SSH güvenli tutmak için transferin çeşitli noktalarında üç farklı veri manipülasyonu yöntemleri kullanılmaktadır. Bunlar simetrik şifreleme, asimetrik şifreleme ve hashleme yöntemidir. 

Şifreleme Teknikleri

Şifreleme yöntemleri SSH’ın kendinden önceki protokollere göre sahip olduğu en büyük avantajdır. Farklı şifreleme yöntemleri sayesinde tamamen güvenli bir veri transferi gerçekleştirilebilmektedir. 

Simetrik Şifreleme

Simetrik şifrelemede hem istemci hem de sunucuda mesajın hem şifrelenmesi hem de açılması için gizli bir anahtar kullanılmaktadır. Kısacası sadece anahtara sahip olan birisi şifrelenmiş mesajı görebilmektedir. Simetrik şifreleme paylaşılan anahtar ya da paylaşılan sır şifrelemesi olarak da kabul edilmektedir. Genellikle tek bir anahtar kullanılmaktadır ancak bazı durumlarda bir anahtarı bulmak için hesaplamada kullanılan diğer bir anahtarın da olduğu anahtar çiftleri kullanılabilmektedir. Simetrik anahtarlar SSH oturumu süresince tüm iletişimi şifrelemek için kullanılmaktadır. Hem istemci hem de sunucu belirli bir yöntem kullanarak anahtarı oluşturmaktadır sonuç olarak anahtar üçüncü taraflar tarafından keşfedilememektedir. Bu işlem anahtar değişimi algoritması ile yapılmaktadır. Simetrik şifrelemeyi güvenli kılan yönü ise anahtarın istemci ile sunucu arasında hiçbir zaman gönderilmemesidir. 

Asimetrik Şifreleme

Simetrik şifrelemenin aksine asimetrik şifrelemede hem şifreleme hem de şifreyi açmak için iki farklı anahtar kullanılmaktadır. Bu anahtarlara public ve private key adı verilmektedir. Bu anahtarlar birlikte public – private key çiftini oluşturmaktadır. Public key adından da anlaşılabileceği gibi tüm taraflara açık bir şekilde dağıtılmaktadır. Private key fonksiyonel yönden public key ile ilişkilendirilse de public key kullanılarak oluşturulmamaktadır. Bir cihazın public key’i ile şifrelenen bir mesaj ancak aynı cihazın private key’i ile açılabilmektedir. İki anahtar arasındaki ilişki oldukça karmaşıktır. Bu tek yönlü ilişki sayesinde public key tek başına kendi mesajlarını ya da private key tarafından şifrelenmiş herhangi bir şeyi açamaz. 

ssh ne işe yarar

Hashleme

Tek yönlü hashleme, Secure Shell bağlantılarında kullanılan bir başka şifreleme yöntemidir. Tek yön hashleme yukarıdaki diğer iki şifreleme yönteminden daha farklıdır. Her bir giriş için belirlenmiş uzunluğa benzersiz bir değer oluşturmaktadır ve bunun için bir yöntem takip etmemektedir. Bu da geri döndürmeyi imkansız hale getirmektedir. Bir giriş için şifrelenmiş hash oluşturmak son derece basittir. Ancak bu hash’i kullanarak girişi oluşturmak mümkün değildir. Eğer istemci doğru girişe sahipse şifrelenmiş bir has oluşturabilir ve doğru giriş olduğunu anlamak için değerini karşılaştırabilir. SSH mesajları doğrulamak için hash’i kullanmaktadır. Bu da HMAC, Hash-based Message Authentication Codes ile yapılmaktadır. HMAC ile gelen komutun herhangi bir şekilde değiştirilmemiş olduğunu göstermektedir.