Uzak Sunucuya Bağlanma
Komut satırından ssh ile bir sunucuya bağlanmak oldukça kolaydır.
Yukarıdaki gibi bağlandığımızda sunucu şifre sormaktadır. Bir kullanıcı adı belirtmediğimiz için, mevcut kullanıcıyı parametre olarak göndermiştir. Oysa ki sunucuya root kullanıcısı ile bağlanmak istiyorduk.
Bu noktada root şifresini girip sisteme bağlanabiliriz.
Bazı durumlarda ssh sunucusunun portu farklı olabilir. Bu, yaygın güvenlik önlemlerinden birisidir. Örneğin yukarıdaki sunucumuzun portu standart SSH portu olan 22 yerine 2291 olsaydı, aşağıdaki gibi bağlanabilirdik.
İpucu: Sık bağlandığınız sunucular için kullanıcı adı, port, özel anahtar yolu gibi seçenekleri her seferinde yazmak yerine, kullanıcının kendi ev dizinindeki ~/.ssh/config
dosyasında tanımlayabilirsiniz. Bu dosya, bağlantı kısayolları ve özel ayarlar tanımlamak için çok kullanışlıdır.
Örnek ~/.ssh/config
dosyası:
Bu yapılandırma ile ssh testserver
komutu otomatik olarak ssh root@94.103.47.66 -p 2291 -i ~/.ssh/id_testserver_ed25519
komutuna genişleyecektir.
Kimlik Doğrulama Yöntemini Seçme
Sunucuya şifreyle bağlanmak yerine, özel anahtarımızla da bağlanabiliriz. İlerleyen bölümlerde bunu nasıl yapacağımızı göreceğiz. Ama şimdilik anahtar yüklü bir sisteme bağlanırken kimlik doğrulama yöntemini nasıl seçeceğimizi görebiliriz.
Aşağıdaki yöntem, kimlik doğrulamada anahtarı gözardı edip, şifre girmeyi zorunlu hale getirmektedir.
Öte yandan, dökümanlarda yer almasa da, bir stackexchange kullanıcısının OpenSSH kodlarını incelerken dikkatini çeken "şifre sormayı zorlama" yöntemini sizinle paylaşmak istiyoruz:
Yukarıdaki yöntem, 2015 tarihinden itibaren çalışmamaya başlamış olsa da, bazı programlarda dokümante edilmemiş özelliklerin barınabileceğini göstermek için iyi bir örnek teşkil ediyor.
Aşağıdaki yöntemleyse, ayar dosyamızda belirilen ssh anahtarı dışında bir anahtarla bağlanabilmenin yolu görülmektedir.
Strict Host Key Checking
Eğer bir sunucuya ilk kez bağlanıyorsanız, genellikle aşağıdaki gibi bir soruyla karşılaşırsınız.
Burada SSH istemcisi, daha önce bağlanmadığınız bu sunucunun kimliğini (94.103.47.66
) sunduğu genel anahtarın parmak izi (fingerprint) ile birlikte size gösterir. Bu mekanizmanın amacı, ortadaki adam (Man-in-the-Middle - MitM) saldırılarını önlemektir. İlk bağlantıda sunucunun parmak izini doğrulamanız (örneğin sunucu yöneticisinden teyit alarak) ve yes
diyerek kabul etmeniz beklenir. Kabul ettiğinizde, sunucunun adresi ve genel anahtarı sizin ~/.ssh/known_hosts
dosyanıza kaydedilir.
Not: Örnekte RSA anahtarı gösterilmiştir. Modern SSH sunucuları genellikle daha güvenli ve performanslı olan Ed25519 veya ECDSA anahtarlarını tercih eder ve sunar. Parmak izi formatı da anahtar türüne göre değişebilir (örn. SHA256 tabanlı).
Ancak daha sonra bu soruyu sormaz, çünkü artık RSA parmak izini kenara not etmiştir SSH.
İlerleyen zamanlarda aynı sunucuya tekrar bağlanmaya çalıştığınızda, SSH istemcisi sunucudan gelen genel anahtarı known_hosts
dosyanızdaki kayıtlı anahtarla karşılaştırır. Eğer anahtarlar eşleşmezse (sunucu yeniden kurulmuş olabilir, anahtarı değişmiş olabilir veya gerçekten bir MitM saldırısı olabilir), SSH bağlantıyı durdurur ve aşağıdaki gibi bir uyarı verir:
Bu noktada SSH kısaca "bağlanmaya çalıştığın sunucunun parmak izi daha önceden farklıydı. Bu şüpheli bir durum. Eğer yine de devam etmek istiyorsan benim kenara not ettiğim satırı sil lütfen" demektedir.
Hata mesajında parmak izini nereye not ettiği görülebilir: /home/eaydin/.ssh/known_hosts:1
yani bu dosyanın ilk satırı.
Bu satırı silersek, tekrar bize yes/no sorusunu soracaktır. Öte yandan tek seferlik bu kontrolü engellemek için aşağıdaki gibi bir bağlantı yapabilirdik.
Aslında yaptığımız /home/eaydin/.ssh/known_hosts
dosyasını yerine /dev/null
kullanmak oldu. Bu dosya da boş olunca, yine RSA parmak izini tanıyıp tanımadığımızı sordu. Eğer bu soruyu da sormamasını isteseydik,
Yukarıdaki mesajda her ne kadar "Permanently added" dese de, eklediği liste dosyası /dev/null
olduğu için, bu bilgi hiçbir yere kaydedilmemiş oldu.
known_hosts
dosyasına eklenen bir RSA parmak izini silmek için dosyayı düzenlemek yerine ssh-keygen
komutunun bir parametresini kullanabilirdik. Bu bizi hashlenmiş dosyada ilgili satırı bulma derdinden kurtarmaktadır. Yukarıdaki örnek için yapacak olursak:
İstemci Ayarları
Yukarıdaki örneklerde -o
parametresiyle bağlantı sırasında bazı seçenekleri açıp kapattık. Aslında burada yaptığımız, ssh istemcinin tanımlanmış ayarlarında bazılarını kullanmayıp o an belirttiklerimizi zorlamaktı.
SSH istemcisinin davranışını etkileyen ayarlar iki ana dosyada bulunur:
/etc/ssh/ssh_config
: Sistem genelindeki varsayılan ayarlar.~/.ssh/config
: Kullanıcıya özel ayarlar. Bu dosyadaki ayarlar, sistem genelindeki ayarları geçersiz kılar (override eder). Sık kullanılan bağlantılar için kısayollar ve özel seçenekler tanımlamak için idealdir.
Örneğin, /etc/ssh/ssh_config
dosyasında veya ~/.ssh/config
dosyasında StrictHostKeyChecking no
ayarı yapılırsa, SSH bilinmeyen veya değişmiş anahtarlar için soru sormaz (güvenlik açısından tavsiye edilmez). Benzer şekilde, varsayılan kullanıcı, port, kullanılacak kimlik dosyaları (IdentityFile
), bağlantı zaman aşımı (ConnectTimeout
) gibi birçok seçenek bu dosyalarda Host
blokları altında veya genel olarak tanımlanabilir.
Detaylı bilgi için ssh_config(5)
man sayfasına bakabilirsiniz:
Last updated