SSH nedir? (yukarı)
SSH nedir? SSH, veya Secure Shell, kullanıcılara sunucularını internet üzerinden kontrol etmesini ve düzenlemesini sağlayan uzak yönetim protokolüdür. SSH, şifrelenmemiş Telnet için güvenli bir yedek olarak oluşturuldu. SSH, şifreleme tekniğini kullanarak uzaktaki sunucuya giden & uzaktaki sunucudan gelen tüm iletişimlerin şifrelendiğinden emin olur. Uzak bir kullanıcının kimliğini doğrulamak, istemciden ana bilgisayara girişleri aktarmak ve çıktıyı istemciye geri göndermek için bir mekanizma sağlar.
Aşağıdaki figür tipik bir SSH penceresini gösterir. Linux ve macOS kullanıcıları işletim sistemlerindeki terminal penceresi ile uzak sunucularına SSH bağlantısı kurabilirler. Windows kullanıcıları SSH bağlantısı kurmak için Putty gibi SSH istemcilerden faydalanabilir. SSH ile uzaktaki bilgisayarda sanki fiziksel olarak bağlıymışsınız gibi shell komutları çalıştırabilirsiniz.
Bu rehber ssh protokolünün basit çalışma prensibini, uzak erişimi güvenli bir yöntem haline getirmek için SSH protokolünün altında yatan teknolojileri anlatır. Kullanılan şifrelemenin farklı katmanlarını, amaçlarını ve türlerini öğrenmek için rehberi okumaya devam edin.
SSH nasıl çalışır? (yukarı)
Eğer Linux veya Mac kullanıyorsanız, SSH kullanmak çok kolaydır. Eğer Windows kullanıyorsanız, SSH bağlantıları açmak için SSH istemcisi kullanmanız gerekecek.
Mac ve Linux kullanıcıları,
terminal programınıza girin ve aşağıdaki prosedürü takip edin:
Bu SSH komutu 3 farklı kısımdan oluşur:
ssh {user}@{host}
SSK anahtar komutu sisteme şifrelenmiş Secure Shell Bağlantısı açmak istediğinizin komutunu verir. {user} ulaşmak istediğiniz hesabı temsil eder. Örneğin, sistem üzerindeki herhangi bir şeyi düzenlemeye tüm yetkisi olan
root kullanıcısına erişmek isteyebilirsiniz.
{host} erişmek istediğiniz bilgisayarı simgeler. Bu bir
IP (ör: 244.235.23.19) veya
Domain (ör: www.xyzdomain.com) adresi olabilir.
Enter tuşuna bastığınızda istenilen hesaba erişimi sağlamak için şifre girmeniz gerekecek. Şifrenizi yazarken ekranda hiçbir şey çıkmayacak ancak aslında şifreniz gönderilecek. Şifrenizi yazmayı tamamladığınızda tekrar enter tuşuna basın. Eğer şifreniz doğruysa, uzak terminal penceresi ile karşılanacaksınız.
Farklı Şifreleme Teknikleri (yukarı)
SSH’ın öncülerine kıyasla sağladığı en büyük avantajı host ile istemci arasında transfer edilen bilgilerin güvenliğinden şifreleme yöntemi ile emin olmasıdır.
Host, erişmeye çalıştığınız uzak sunucuyu ve istemci (
client) de host’a erişmek için kullandığınız bilgisayarı temsil eder. SSH tarafından kullanılan 3 farklı şifreleme teknolojisi bulunur:
- Simetrik şifreleme
- Asimetrik şifreleme
- Hashing
Simetrik Şifreleme (yukarı)
Simetrik şifrelemede bir mesajın hem şifrelenmesi ve şifresinin çözülmesi için hem
Client hem de host tarafından aynı
gizli anahtar kullanılır. Bu durumda, bu gizli anahtara sahip herhangi biri transfer edilen mesajın şifresini çözebilir.
Simetrik şifrelemeye aynı zamanda
paylaşılan anahtar ve
paylaşılan gizlilik şifrelemesi de denir. Genellikle yalnızca bir anahtar veya çift anahtar kullanılır. Çift anahtar kullanıldığında da bir anahtardan diğer anahtar hesaplanarak kolaylıkla bulunabilir.
Simetrik anahtarlar bir SSH oturumunun tamamını şifrelemek için kullanılır. Hem istemci hem de host, üzerinde anlaşmaya varılan bir yöntemi kullanarak gizli anahtarı türetir ve elde edilen anahtarı hiçbir zaman üçüncü bir tarafa ifşa etmez. Bu simetrik anahtar oluşturma işlemi
anahtar takas algoritması tarafından yürütülür. Bu algoritmayı güvenli kılan kısım anahtarın istemci ve host arasında hiçbir zaman iletilmiyor olmasıdır. Bunun yerine, iki bilgisayar ortak veri parçalarını paylaşır ve bağımsız olarak gizli anahtarı hesaplamak için bu verileri kullanır. Başka bir makine genel olarak paylaşılan verileri yakalasa bile, anahtar değişim algoritması bilinmediği için anahtarı hesaplayamaz.
Bununla birlikte, gizli token her SSH oturumuna özeldir ve istemci kimlik doğrulamasından önce oluşturulur. Anahtar üretildikten sonra, iki makine arasında hareket eden tüm paketler özel anahtarla şifrelenmelidir. Bu, kullanıcı tarafından konsola girilen şifreyi de içerir. Bu nedenle kimlik bilgileri ağ paket algılayıcılarından korunur.
AES (Gelişmiş Şifreleme Standardı – Advanced Encryption Standard), CAST128, Blowfish vb. gibi çeşitli simetrik şifreleme yöntemleri bulunur. Güvenli bir bağlantı kurmadan önce, client ve host tercih sıralarına göre desteklenen şifreleme yöntemlerini listeleyerek hangi şifrenin kullanılacağına karar verir. Host’un listesinde bulunan ve client tarafından desteklenen en çok tercih edilen şifreme yöntemi çift yönlü şifre olarak kullanılır.
Örneğin, eğer iki Ubuntu 14.04 LTS makinesi birbirleri ile SSH üzerinden iletişim kuruyorsa, şifreleme için
aes128-ctr kullanırlar.
Asimetrik Şifreleme (yukarı)
Simetrik şifrelemeden farklı olarak, asimetrik şifreleme yöntemi şifreleme ve şifreyi çözme işlemleri için iki farklı anahtar kullanır. Bu iki anahtar
public key ve
private key olarak bilinir. Bu anahtarlar birlikte
public-private anahtar çiftini oluştururlar.
Adından da anlaşılacağı gibi public key herkese açıktır ve herkesle paylaşılır. İşlevsellik açısından private key ile yakından bağlı olsa da private key matematiksel işlemler uygulanarak public key’den oluşturulamaz. İki anahtar arasındaki ilişki son derece karmaşıktır. Bir makinenin public key’i ile şifrelenen bir mesaj yalnızca o makinenin private key’i ile çözülebilir. Bu tek yönlü şifreleme public key’in kendi şifrelediği mesajları çözemeyeceği anlamına gelir. Benzer şekilde, private key ile şifrelenen mesajları da çözemez.
Private key özel kalmalıdır. Bağlantının güvenli kalması için 3. partiler asla öğrenmemelidir. Bağlantının güvenliği tamamen tek şifre çözücü olan private key’in asla açığa vurulmuyor olmasıdır. Dolayısıyla public key ile şifrelenmiş bir mesajı çözmek isteyen biri, public key’in çifti olan private key’e sahip olmalıdır.
Genel anlayışın aksine, asimetrik şifreleme tüm SSH oturumunu şifrelemek için kullanılmaz. Yalnızca simetrik şifrelemenin anahtar takas algoritmasında kullanılır. Güvenli bağlantı kurmadan önce her iki taraf geçici public-private anahtar çifti oluşturur ve bu public anahtarları ortak bir gizli anahtar oluşturmak için paylaşırlar.
Güvenli bir simetrik bağlantı kurulduğunda sunucu istemcinin public key’ini kullanarak yetkileme esnasında oluşturmak ve göndermek için onu kullanır. Eğer istemci başarıyla mesajı çözebiliyorsa, bağlantı için gerekli olan private key’e sahiptir demektir. Ardından SSH oturumu başlar.
Secure Shell Bağlantılarında tek yönlü hashing de kullanılan şifreleme yöntemlerinden biridir. Bu yöntemle şifrelenen mesajları diğerlerinden farklı kılan özellik, mesajların asla çözülmesi gerekmemesidir. Bu yöntemle her mesaj tek yönlü şifrelendikten sonra önceden belirlenmiş uzunlukta eşsiz bir mesaj halini alır. Bu da mesajın tekrar geri dönememesini sağlar.
Mesajdan şifrelenmiş hash oluşturmak kolaydır ancak şifrelenmiş hash’den mesajı geri getirmek imkansızdır. Bu da istemcinin doğru mesaj olup olmadığını kendisindeki mesajı hashing ile şifreleyip karşıdan aldığı hash ile karşılaştırarak öğrenebileceği anlamına gelir.
SSH hash’leri kullanarak mesajların güvenirliliğini doğrular. Bu işlem HMAC’ler (
Hash-based
Message
Authentication
Codes) ile sağlanır. Böylece gelen komutun hiçbir şekilde oynanmamış olduğundan emin olur.
Simetrik şifreleme algoritması seçilirken uygun bir mesaj yetkilendirme algoritması da seçilir. Bu yine simetrik şifreleme kısmında anlatılan cipher’ın seçilmesi gibi olur.
Her mesaj simetrik anahtar, paket sıra numarası ve mesaj içeriği kullanılarak hesaplanan MAC ile gönderilir. Simetrik olarak şifreli verinin dışına, iletişim paketinin son bölümü olarak gönderilir.
SSH nedir? Bu Şifreleme teknikleri ile nasıl çalışır? (yukarı)
SSH’nin çalışması, iki uzak sistemin kimlik doğrulamasına ve aralarında geçen verilerin şifrelenmesine izin vermek için bir istemci-sunucu modelinden faydalanmaktır.
SSH varsayılan olarak TCP port 22 üzerinde çalışır. (Gerektiğinde değiştirilmesi mümkündür.) Host (sunucu) gelen bağlantılar için 22 portunu (veya hangi port ayarlanmışsa) dinler. İstemciyi yetkilendirerek ve yetkilendirme başarılı olduğunda doğru shell ortamını açarak güvenli bağlantıyı organize eder.
Client sunucu ile el sıkışma işlemini (handshake) başlatarak, simetrik bağlantıdan emin olarak, sunucunun kimliğini sunucuda gösterilen kimliği önceki kayıtlarla (genellikle RSA anahtar depolama dosyasındakilerle) karşılaştırarak eşleyerek ve yetkilendirme için gerekli kullanıcı giriş bilgilerini sunarak SSH bağlantısını başlatmalıdır.
Bağlantı kurmanın iki kademesi bulunur. Önce her iki sistem de gelecek iletişim için şifreleme standartlarında anlaşmalıdır. Ardından kullanıcı kendisini yetkilendirmelidir. Eğer giriş bilgileri eşlenirse kullanıcıya erişim sağlanır.
Oturum Şifreleme Görüşmesi (yukarı)
Client sunucuya TCP ile bağlanmaya çalıştığında sunucu şifreleme protokollerini ve desteklediği sürümlerini gösterir. Eğer client benzer bir protokol ve sürüm çiftine sahipse, anlaşmaya varılır ve bağlantı kabul edilen protokol ile başlatılır. Aynı zamanda sunucu client’ın host’un güvenilirliğini doğrulamak için kullanabileceği bir asimetrik public key kullanır.
Bağlantı kurulduğunda simetrik anahtar oluşturmak için iki taraf Diffie-Hellman Anahtar Takas Algoritması olarak adlandırılan algoritmayı kullanır. Bu
Algoritma ile client ve server tüm iletişim oturumu süresince şifrelemek için kullanılacak paylaşılan bir şifreleme anahtarını elde ederler.
En basit seviyede algoritma nasıl çalışır:
- Hem client hem de server, çok büyük bir asal sayı (ortak bir faktörü olmayan) üzerinde anlaşır. Bu asal sayı değeri tohum değeri olarak da bilinir.
- Daha sonra, iki taraf, tohum değerlerini belirli bir algoritma biçiminde manipüle ederek başka bir değer seti üretmek için ortak bir şifreleme mekanizması üzerinde anlaşır. Şifreleme jeneratörleri olarak da bilinen bu mekanizmalar tohumda büyük operasyonlar gerçekleştirir. Böyle bir jeneratörün bir örneği AES’dir. (Advanced Encryption Standard – Gelişmiş Şifreleme Standardı).
- Her iki taraf bağımsız olarak başka bir asal sayı üretir. Bu, etkileşim için gizli bir özel anahtar olarak kullanılır.
- Yeni oluşturulan private key, paylaşılan sayı ve şifreleme algoritması (ör: AES) ile diğer bilgisayara dağıtılmak üzere public key oluşturur.
- Ardından her iki taraf da kişisel private key’lerini, diğer makinenin public key’ini ve orijinal asal sayıyı kullanarak bir paylaşılan anahtar oluşturur. Bu anahtar her iki bilgisayarda farklı farklı oluşturulsa da her iki tarafta oluşan key aynı olur.
- Şimdi her iki taraf da paylaşılan bir anahtara sahiptir. Bu anahtarla tüm SSH oturumunu simetrik olarak şifreleyebilirler. Aynı anahtar mesajları şifrelemek ve şifreli mesajları çözmek için kullanılabilir.
Artık güvenli simetrik şifreleme oturumu kurulduğuna göre kullanıcının kimliği doğrulanabilir.
Kullanıcının Kimliğini Doğrulama (yukarı)
Kullanıcıya sunucu erişimi sağlamadan önceki son adım kullanıcının giriş bilgilerini doğrulamaktır. Bunun için çoğu SSH kullanıcısı şifre kullanır. Kullanıcıdan kullanıcı adlarını ve ardından şifrelerini yazmaları istenir. Bu bilgileri simetrik şifrelenmiş iletişim tüneli kullanılarak güvenli bir şekilde aktarılır. Dolayısıyla 3. partiler tarafınca ele geçirilmelerine imkan yoktur.
Parolalar şifrelenmiş olsa da, güvenli bağlantılar için şifre kullanılmaması önerilir. Bunun nedeni de bot’ların basit veya varsayılan şifreleri brute force yöntemiyle basitçe ele geçirebilecek olmalarıdır. Bunun yerine SSH Key Eşleri oluşturmanız önerilir.
Bunlar kullanıcıları herhangi bir şifre girmeden yetkilendirmek için kullanılan asimetrik anahtar setleridir.
Bu rehber ile SSH nedir ve SSH çalışma prensibi hakkında detaylı bilgiler öğrendiniz. Çoğu insan bu süreci son derece karmaşık ve anlaşılamaz olarak değerlendirir; ancak çoğu insanın düşündüğünden çok daha basittir. Bir bilgisayarın bir hah’i hesaplamasının ve bir kullanıcının kimliğini doğrulamasının ne kadar sürdüğünü merak ediyorsanız, bir saniyeden kısa sürdüğünü söyleyebiliriz. Aslında, İnternet’e veri aktarımı için gereken azami süre harcanır.
Umarım, bu SSH nedir rehberi, her bir mekanizmanın oynayacağı çok önemli bir role sahip sağlam bir sistem oluşturmak için farklı teknolojilerin birlikte nasıl dolaşılabileceğini görmenize ve temel olarak SSH nedir sorusunu anlamanıza yardımcı olmuştur. Ayrıca, artık SSH gelir gelmez Telnet’in neden geçmişte kaldığını biliyorsunuz.