İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Reha Gerçekler

SSH Nedir?

Ağ üzerinden başka bilgisayarlara telnet ya da rlogin programlarıyla bağlanıldığı zaman, kullanıcı şifreleri de dahil olmak üzere bütün bilgi alışverişinin şifrelenmeden yapıldığı gözardı edilir. SSH, açık haliyle "Secure Shell" ya da güvenli kabuk, telnet ve rlogin programlarının yerini alan ve güvenilmeyen makineler arasında şifrelenmiş iletişimi sağlayan bir programdır. ssh ile bir bilgisayara bağlanabilmek için kullanıcı, öncelikle kimliğini ispatlayabilmelidir. Bunu yapmanın, kullanılan protokollere de bağlı olarak, çeşitli yolları vardır. Eğer bu yöntemlerle ilgileniyorsanız, okumaya devam edin. Eğer yapmanız gerekenleri öğrenmek istiyorsanız, "SSH ile Bağlantı için Yapılması Gerekenler" başlığına geçebilirsiniz.

SSH Protokol Sürümü 1

İlk yöntem olarak, bağlanmak isteyen makinenin /etc/hosts.equiv veya /etc/ssh/shosts.equiv dosyalarından birinde listelenip listelenmediği kontrol edilir ve istemci makinede çalışan kullanıcı adı ile bağlanmak isteyen kullanıcı adı aynıysa, kullanıcının sisteme girmesine hemen izin verilir. İkinci olarak, bağlanılmak istenen makinede kullanıcının ev dizini (eğer varsa) altında .rhosts veya .shosts dosyasının olup olmadığı kontrol edilir; eğer dosyalardan biri varsa ve bağlanmak isteyen makine ile kullanıcının o makinedeki adı bu dosyada yazıyorsa, kullanıcının sisteme girmesine izin verilir. Ancak, normalde bu şekildeki kimlik denetimine güvenlik sebepleri yüzünden sunucu tarafından izin verilmez.

Kullanılan birincil yöntem RSA tabanlı kimlik denetimi ile birleştirilmiş rhosts ve hosts.equiv yöntemidir. Bu şu anlama gelir: eğer $HOME/.rhosts, $HOME/.shosts, /etc/hosts.equiv veya /etc/ssh/shosts.equiv dosyalarından bir tanesi bağlantıya imkan verir ve aynı zamanda sunucu istemcinin anahtarını doğrularsa (bu anahtar bir sunucuya ilk kez bağlanıldığında istemciye verilen anahtardır) kullanıcının sisteme girmesi mümkündür. Bu yöntem birçok güvenlik açığını kapatmaktadır.

Bir başka yöntem olarak da RSA tabanlı kimlik denetimi yapılır. RSA ile şifrelemede, şifreleme ve şifreyi çözme farklı anahtarlar tarafından yapılır ve şifreyi çözecek anahtarı diğer anahtardan elde etmek mümkün değildir. Buradaki fikir her kullanıcının kendine ait bir genel/özel anahtar ikilisi yaratmasıdır. Sunucu, şifrelemeye yarayan genel anahtarı bilir; onu çözecek özel anahtar ise sadece kullanıcı tarafından bilinir. $HOME/.ssh/authorized_keys dosyası bağlanmasına izin verilecek genel anahtarları içerir. Kullanıcı sunucuya bir bağlantı isteği yaptığı zaman, ssh sunucuya hangi anahtar çiftini kullanmak istediğini belirtir. Sunucu bu çiftin kullanımının izinli olup olmadığını kontrol eder ve izin verilmişse karşı tarafa şifrelenmiş bir mesaj -kullanıcının genel anahtarı ile şifrelenmiş rastgele bir sayı- gönderir. Mesaj sadece kullanıcının özel anahtarı ile çözülebilir. Kullanıcı tarafında özel anahtar ile mesaj çözülerek anahtarın kendisi sunucuya gönderilmeden özel anahtarın bilindiği kanıtlanır.

SSH RSA ile kimlik denetimini otomatik olarak destekler. Kullanıcı kendi anahtar çiftini ssh-keygen ile yaratır. Bu işlemin ardından özel anahtar $HOME/.ssh/identity dosyası içine, genel anahtar ise $HOME/.ssh/identity.pub dosyası içine kaydedilir. Bundan sonra kullanıcının yapması gereken, $HOME/.ssh/identity.pub dosyasını bağlanmak istediği makinede $HOME/.ssh/authorized_keys adlı dosyanın içine kopyalamaktır. Bundan sonra kullanıcı şifre girmeden karşı makineye bağlanabilir. RSA yöntemi diğerlerinden çok daha güvenilirdir.

Eğer bu anlatılan şekillerden biriyle kullanıcı kimliğini ispatlayamazsa kendisinden şifresi istenir. Ancak daha önce de belirtildiği gibi, tüm iletişim şifrelenerek yapıldığı için kullanıcı şifresinin ağı dinleyen bir kişi tarafından öğrenilmesi mümkün değildir.

SSH Protokol Sürümü 2

Kullanıcı bu protokol ile bağlanmak istediği takdirde iki denetim şekli sözkonusudur: önce genel/özel anahtar yöntemi, başarısız olursa şifre isteme yöntemi.

İkili anahtar yöntemi yukarıda anlatılanla aynıdır; tek farkı şifreleme için RSA yerine DSA algoritmasının kullanılmasıdır. Sunucu bağlantıya izin verilen genel anahtarları $HOME/.ssh/authorized_keys2 dosyasında tutarken, kullanıcının özel anahtarı $HOME/.ssh/id_dsa dosyasında saklanır. Eğer genel anahtarın bağlantısına izin verilmişse ve kullanıcı tarafında özel anahtar ile şifre çözülebilirse bağlantıya izin verilir.

Aksi takdirde, yukarıda da anlatıldığı gibi sunucu karşı taraftan bağlantı için kullanıcı şifresini ister.

SSH ile Bağlantı için Yapılması Gerekenler:

ssh zigana.be.itu.edu.tr

komutunu verdiğiniz zaman ssh ile adı belirtilen makineye bağlantı isteğinizi gönderirsiniz.

Eğer belirttiğiniz bilgisayara ssh ile ilk kez bağlanıyorsanız, ssh size bunu gerçekten isteyip istemediğinizi soracaktır. Eğer bağlantıyı onaylarsanız, karşı makinenin adresi ve makine tarafından size verilen bir anahtar (bunu yukarıda anlatılan genel/özel anahtar çiftleri ile karıştırmayın) $HOME/.ssh/known_hosts dosyası içine kaydedilir. Bir daha bu makineye bağlanacağınız zaman size bu soru tekrar sorulmaz. Sunucu tarafından makineye verilen anahtar daha sonraki bağlantılarda bilgisayarı teşhis etmek için kullanılır. Eğer anahtarda bir sorun varsa sunucu bağlantıyı kabul etmez

Bundan sonra karşı taraf sizden kullanıcı şifrenizi ister. Bu, uzaktaki makineye girmekte kullandığınız her zamanki kullanıcı şifrenizdir. Bilgisayarlar arası veri alışverişinin şifreli ve dolayısıyla güvenilir olduğunu unutmayın. Eğer kullanıcı şifrenizi doğru girerseniz, telnet ya da rlogin ile alıştığınız konsol karşınıza çıkacaktır.

Bunun yanında karşıdaki bilgisayara o anda üzerinde çalışmakta olduğunuz bilgisayardakinden farklı bir kullanıcı adı ile bağlanmak isteyebilirsiniz. Bu durumda, örneğin,

ssh -l gerceker zigana.be.itu.edu.tr
ya da 
ssh gerceker@zigana.be.itu.edu.tr

komutları ile karşı makineye "gerceker" kullanıcısı olarak bağlanmak istediğinizi belirtebilirsiniz.

Yukarıda özetlenen biçimde telnet veya rlogin ile alışılmış bağlantı işlemini çok daha güvenli bir yöntemle ssh aracılığıyla gerçekleştirebilirsiniz. Ancak, yukarıda anlatılan şekilde, her bağlantınızda sunucu sizden kullanıcı şifrenizi isteyecektir. Eğer karşı makineye RSA yönteminin sağladığı kolaylıkla, sunucu sizden şifre istemeden bağlanmak isterseniz aşağıdaki adımları takip edin:

Bu işlemleri başarıyla tamamlarsanız, ssh ile bu makineye bir daha bağlanmak istediğinizde sizden şifre sorulmayacaktır. Kimlik denetimi, arkaplanda istemci ve sunucu arasında gerçekleşen anahtar çifti yöntemi ile yapılacaktır.

Bundan sonra her iki makine üzerinde de $HOME/.ssh/identity.pub dosyasına ihtiyaç yoktur. İsterseniz onları silebilirsiniz. Dikkat etmeniz gereken nokta $HOME/.ssh dizininin izinlerinin 0700 olduğudur. Diğer bir deyişle bu dizin üzerinde sadece kullanıcının kendisi işlem yapabilir. Bu izinleri değiştirmeyin. Ayrıca sözü geçen dosyalardan, $HOME/.ssh/identity dosyası sizin özel anahtarınızı içerdiği için başka kullanıcılar bu dosyaya erişememelidir. Bunun için dosyanın izinlerinin 0600 olarak kalmasını sağlayın. $HOME/.ssh/authorized_keys dosyasının da, özel anahtarınızı içeren dosya kadar kritik olmamakla birlikte, başkaları tarafından okunabilmesine gerek yoktur. İzinlerinin 0600 ya da 0644 olarak kalmasına dikkat edin. Zaten dosyalar yaratılırken bu özelliklerle yaratılırlar ve siz değiştirmezseniz herhangi bir sorunla karşılaşmazsınız. Bilgisayarlarla işiniz bittiğinde alanınızı da terkederseniz, herhangi bir güvenlik sorunu yaşamamış olursunuz.

SFTP Nedir?

sftp, ftp benzeri, ancak veri transferi için ssh'yi kullanan bir dosya transferi programıdır. ssh'nin güvenlik ile ilgili tüm özelliklerini desteklemektedir. İki bilgisayar arasında dosya alışverişinin yapılabilmesi için öncelikle ssh tarafından yapılan kimlik denetiminin geçilmesi gerekir.

sftp ile bir sunucuya bağlanmak için

sftp kackar.be.itu.edu.tr

komutunu vermeniz yeterlidir. Eğer o anki kullanıcıdan farklı bir kullanıcı olarak bağlanmak istiyorsanız

sftp gerceker@kackar.be.itu.edu.tr

komutunu verebilirsiniz.

Eğer belirttiğiniz makineye sftp ile ilk kez bağlanıyorsanız, sftp size emin olup olmadığınızı soracaktır. Eğer onaylarsanız, bağlandığınız makinenin adı ve sunucu tarafından size verilen bir anahtar $HOME/.ssh/known_hosts2 dosyasına kaydedilir. Aynı soru bir kez daha sorulmaz. İlk bağlantıda makineye atanan bu anahtar, her bağlantıda kontrol edilir ve eğer değişmişse sunucu bağlantıya izin vermez.

Bağlantı isteğinizi yaptıktan sonra sunucu, SSH protokol sürümü 2'yi kullanarak kimlik denetimi yapacaktır. Eğer DSA algoritması ile yaratılmış doğru bir genel/özel anahtar çiftiniz varsa şifre sorulmadan bağlantı gerçekleşir. Aksi takdirde kullanıcı şifrenizi girmeniz gerekir. Bağlantı gerçekleştikten sonrası alışılmış ftp komutlarıyla yürütülen interaktif bir oturumdur.

Şimdi şifre sorulmayan bir sftp bağlantısına kavuşmak için neler yapmanız gerektiğine bakalım:

İstemci makine üzerinde 
ssh-keygen -t dsa

komutunu verin. Bu komut DSA algoritması ile (protokol sürümü 2 için) bir genel/özel anahtar çifti yaratacaktır. Özel anahtar $HOME/.ssh/id_dsa, genel anahtar ise $HOME/.ssh/id_dsa.pub dosyası içine kaydedilir.

Bundan sonra id_dsa.pub dosyasını bağlanmak istediğiniz makinede $HOME/.ssh/authorized_keys2 dosyasına kopyalamanız gerekir. Bunun için $HOME/.ssh/id_dsa.pub dosyasını karşı bilgisayara attıktan sonra, $HOME/.ssh dizini içinde sırayla

cat authorized_keys2 id_dsa.pub > tmp
mv tmp authorized_keys2

komutlarını kullanabilirsiniz.

Bu işlemler başarıyla tamamlandıktan sonra sftp ile yapacağınız bağlantılarda sizden şifre sorulmayacaktır; kimlik denetimi arkaplanda sunucu ve istemci arasında anahtar çiftleri kullanılarak yapılacaktır.

SSH ile bağlantı konusunda da belirtildiği gibi, özel anahtarınızı içeren id_dsa dosyasının sadece kullanıcı tarafından okunur ve yazılır olmasına dikkat edin. $HOME/.ssh dizini ve içindeki dosyaların izinleriyle oynanmaması en iyi çözümdür.

SCP Nedir?

scp ağ üzerinde dosya kopyalamaya yarayan bir programdır. Veri transferi ve kimlik denetimi için ssh'yi kullanır. Dolayısıyla aynı güvenliği sağlar. Yukarıda ssh için anlatılan tüm denetimler istenilen dosyalar kopyalanmadan önce gerçekleştirilir. Sadece istemci kimliğini ispatlayabilirse kopyalama işlemi yapılır.

Dosya kopyalama işleminden önce sunucu SSH protokol sürümü 1 ile kimlik denetimi yapar. Eğer sunucudaki genel anahtar ile istemcideki özel anahtar uyuşursa bağlantıya izin verilir. Başarısızlık halinde kullanıcı şifresi sorulur. Buradaki genel/özel anahtar çiftinin nasıl yaratılacağını ve bunlarla neler yapılması gerektiğini "SSH ile Bağlantı için Yapılması Gerekenler" başlığı altında bulabilirsiniz.

Kısaca scp komutunu nasıl kullanacağınıza değinelim.

scp ./foo gerceker@zigana.be.itu.edu.tr:~/

komutu, üzerinde bulunduğunuz bilgisayarda çalıştığınız dizin içindeki foo adlı dosyayı, zigana.be.itu.edu.tr adlı bilgisayardaki gerceker adlı kullanıcının ev dizinine kopyalayacaktır. Uzaktaki makine belirtilirken kullanılacak yazım şekline dikkat edin:

kullanıcı_adı@makine_adı:dizin

Bir örnek daha verelim:

scp gerceker@patara.be.itu.edu.tr:~/public_html/ssh/index.html .

komutu patara.be.itu.edu.tr makinesinde gerceker adlı kullanıcının belirtilen dizinde bulunan index.html dosyasını, o anda üzerinde çalışılan bilgisayardaki çalışma dizinine kopyalayacaktır.

scp ile uzaktaki iki bilgisayar arasında dosya kopyalama işlemini üçüncü bir bilgisayar üzerinden gerçekleştiremezsiniz.

scp'yi her zaman yaptığınız gibi genel arama karakterleri (wildcard) ile de kullanabilirsiniz. Eğer kopyalayacağınız dizinin bütün alt dizinlerini de kopyalamak istiyorsanız -r parametresini de kullanabilirsiniz. Örneğin,

scp -r gerceker@kapadokya.be.itu.edu.tr:~/* .

komutu gerceker kullanıcısının ev dizinini tümüyle kopyalamak için kullanılabilir.

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır