Bir Makinaya SSH ile Şifresiz Giriş
Bir makinadan diğerine hem şifresiz hem de güvenli bir şekilde girip,
orada komut işletmek, ya da oraya dosya kopyalamak için iki program
vardır: ssh ve scp. Kullanmak için komut satırından (ssh
için)
ssh host1 -l remoteuser
komutunu kullandığınızda host1
adlı makinaya remoteuser
kullanıcısı üzerinden login etmiş olurzzzz. Ya da uzak makinada bir
komut işletip sonucunu kendi makinanıza almak isterseniz (meselâ
ikinci makinada listeleme komutu olan ls işletelim), şunu yaparız
ssh host1 -l remoteuser ls
Eğer uzak makinaya bir dosya kopyalamak istersek
scp file.txt remoteuser@host1:/tmp
Bu komut ile uzaktaki makinaya sanki yerel dizinlerimiz arasında dosya kopyalıyormuş kadar rahat bir şekilde bir dosya kopyalayabiliyoruz. Girişte bahsettiğimiz ba- sit teknik işte budur. ssh ve scp bir kez kurulduktan sonra, uzaktaki makina, yerel makinanızın bir uzantısı hâline gelir. Bir makinayı uzaktan idare etmek demek, ya bir dosya değişimi, ya da bir komut işletmek demek olduğu için, bu iki programı kullanarak uzaktaki bir makinada yapamayacağımız şey yoktur.
Şifresiz Kullanımı Kurmak
Eğer ssh’i hiçbir ek ayar yapmadan kullanırsanız, (ilk kurduğumuz haliyle) her kullanışınızda size bir şifre sorulacaktır. Aynı şekilde scp komutu da böyle davranır. Fakat, biz meselâ yüz tane makina için arka arkaya scp ya da ssh kullanmamız gerekeceği için, şifre isteme işlemini iptal edip, güvenlik kon- trolünü kullanıcıya sorulmayan başka bir şekilde yapmamız gerekiyor. Bu yöntem de, açık / gizli (public / private) anahtarlar kullanarak yapılan güvenlik kon- trolüdür.
Windows üzerinde ssh ve scp’nin işler kodlarını kurmayı, A.8 bölümünde bulabilirsiniz. Linux üzerinde ssh ve scp genellikle otomatik olarak kurulur, eğer kurulmamışsa, Linux kurulum disklerinizde bu programı bulabilirsiniz, ya da admin’inize bu programları kurdurabilirsiniz.
Açık / gizli anahtar kurulumunu yapmak için şunları yapın: İlk önce kod gönderimi ya da uzaktan idareyi yapan yerel makinamızı tanıtan bir gizli anahtar, bir de açık anahtar üretmemiz gerekiyor.
$ ssh-keygen -t rsa
Sorulan sorular için hiç cevap girmeden ENTER’e basarak geçin. Bu
bittikten sonra, $HOME/.ssh/
dizininiz icinde 2 dosya
göreceksiniz. Bu dosyalar id¬ rsa.pub ve idrsa dosyaları
olacaktır. HOME değişkeninin nerede olduğunu ko- mut satırından
Unix/Cygwin’de echo $HOME
ile öğrenebilirsiniz. Windows’da
dosyaların nereye yazıldığı OpenSSH tarafından zaten ssh-keygen
sonunda size bildirilecektir.
Biraz önce üretilen dosyalardan id_rsa
, gizli anahtarınızdır. Dosya
id_rsa.pub
ise açık anahtarınızdır. Şimdi, id_rsa.pub
kayıdındaki
açık anahtarı, uzaktan erişeceğiniz servis bilgisayarına FTP ya da scp
ile gönderin (scp kullanırsanız, -şimdilik- şifre girmeniz gerekecek
tabii ki). Sonra, uzaktaki bilgisa- yardaki kullanacağınız kullanıcı
hesabına girin, hesabın üst seviyesinde $HOME/.ssh/
dizini altına
id_rsa.pub kayıdını bırakın. Sonra, servis sisteminde
cat > $HOME/.ssh/id_rsa.pub >> authorized_keys
komutunu calıştırın. Kuruluş işlemi bundan ibarettir. Bu son işlemden sonra artık uzaktan işlettiğiniz ssh ve scp işlemleri şifresiz bir şekilde işinizi yapmanıza izin verecektir.
Açık anahtarımızı servis makinasına eklemek için, Unix cat komutu ile
>>
işlecini kullandığımıza dikkat edelim. Bu demektir ki, birden
fazla .pub dosyasına tek bir authorized_keys dosyasına ekleyebiliriz
(ve birden fazla kullanıcıyı desteklebilmek için bunu yapmamız
gerekir). Böylece aynı makinaya erişen birden fazla erişen kişi, aynı
servis makinasına ve aynı kullanıcıya değişik açık anahtarlar ile
erişebilir. Bkz [2]
Uzak Dosya Erişimi
Uzaktaki makinanın herhangi bir dizin hiyerarşisini belli bir
noktasından alıp, ssh
üzerinden bizim yerel makinadaki bir boş
dizine "montelemek (mount)" mümkün, sshfs
ile. Kurmak için
sudo apt-get install sshfs
Şimdi mesela ben yerel user1
kullanıcısı olayım,
/home/user1/Downloads/uzak
boş dizinine (yoksa yaratırım)
192.168.1.1 makinasındaki /home/ahmet/Documents
dizinini monteleyelim,
sudo sshfs -o allow_other,default_permissions burak@192.168.1.1:/home/ahmet/Documents /home/user1/Downloads/uzak
Önce kendi (root kabüllü) şifreniz, sonra uzaktaki makinanın şifresi
sorulacak. Girince işlem tamamlanır, mount
komutuyla montelenen
dizinler listesinde uzaktaki makina artık görülmelidir
Artık kendi /home/user1/Downloads/uzak
dizinime gittiğimde, uzaktaki
/home/ahmet/Documents
dizinini görürüm, hangi programı kullanırsam
kullanayım bu işler.
Eski Anlatım
SSH gizli/açık anahtar kavramına göre çalışır (public/private key encryption). Uzak bir makinada şifresiz giriş yapmak, komutlar işletmek, ve scp ile şifresiz kopyalama yapmak için, şunları yapmamız lâzım.
Kendimiz için bir gizli/açık anahtar çifti yaratmak için şu komutu çalıştırın.
$ ssh-keygen -t rsa
Sorulan sorular için hiç cevap girmeden ENTER'e basarak geçin.
Bu bittikten sonra, $HOME/.ssh
dizini icinde 2 dosya
göreceksiniz. idrsa.pub ve idrsa. ($HOME
'un nerede olduğunu
Cygwin'den ya da Linux komut satırından echo $HOME
ile
öğrenebilirsiniz). Bu kayıtlardan idrsa isimli olan sizin gizli
anahtarınızdır, idrsa.pub ise açık anahtarınızdır. Şimdi, id_rsa.pub
kayıdını, erişeceğiniz bilgisayara (meselâ CVS havuzunu tutan
bilgisayara) scp
ya da ftp
ile gönderin (scp kullanilinca simdilik
sifre sorulacak). O bilgisayardaki kullanıcı adınız altında girin, ve
$HOME/.ssh
dizini altına id_rsa.pub
kayıdını bırakın.
Sonra, sunucu sisteminde sunu calıştırın:
cat $HOME/.ssh/id_rsa.pub >> authorized_keys
Kutlarım. Artık ssh ya da CVS komutları kullanırken şifreye
ihtiyacınız olmayacak. Artık ssh kullanıcı@makina
ile şifresiz
yapabiliriz, hatta ssh kullanıcı@makina komut
ile uzaktaki
makinadaki bir programı başlatıp sonuçlarını direk kendi makinamızda
görebiliriz.
Unix cat
komutu ile >>
işlecini kullandığımıza dikkat edin. Bu
demektir ki, birden fazla .pub dosyasına tek bir authorized_keys
dosyasına ekleyebiliriz. Yâni, birden fazla erişen kişi, aynı servis
makinasına ve aynı kullanıcıya değişik açık anahtarlar ile erişebilir.
Önemli bir ek detay, servis tarafındaki authorizedkeys dosyasının güvenliğinin çok fazla açık olmamasıdır. Eğer dosyanın Unix bazında güvenliği çok açıksa, sshd bağlanmaya çalışan ssh/scp komutunu bir şifre girmeye zorlayacaktır. authorizedkeys dosyasının yeterince kapalı hale getirmek için
chmod 600 authorized_keys
Çift Anahtar Bazlı Şifresiz Giriş Ne Kadar Güvenli?
Bu kullanım güvenli, çünkü bir korsan, servis bilgisayarına sadece ve sadece id_rsa dosyasına sahipse başarabilir. Bu dosya da, sizin bâğlanan bilgisayarınızda duruyor olacaktır, ve o dosyayı almak için bâğlanan bilgisayara, (yâni ssh-keygen komutunu işlettiğiniz bilgisayara) sızılması gerekecektir. Demek ki akılda tutulması gereken kıstas şudur: Çift anahtar yaklaşımını kullanarak iki makina arasında şifresiz giriş kurduğunuzda, bağlanılan makina, bağlanan makinanın güvenli olduğu kadar güvenli olacaktır.
Sorun Çıkarsa
Bazı tipik kuruluş problemleri şunlar oluyor. SSH bağlanamama problemlerinde, sunucu bilgisayarında sshd programınının calıştığını kontrol edin. "ps -eaf | grep sshd" ile bunu kontrol edebilirsiniz.
Bağlanan bilgisayarlarda Cygwin'e özel bir problem de Windows'da çıkabiliyor. Bunun tarifi ve tamiri de şöyle:
Cygwin ssh programı (OpenSSH), gizli anahtarın üzerindeki erişim haklarının "kullanıcıya özel" olmasını istiyor. Bu normal tabii çünkü bu anahtar gizli, ve her kullanıcı tarafından okunamaması lâzım.
Hata şöyle:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/cygdrive/h/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
Hiç problem degil (diye düşünüyoruz) chmod, vs. iş biter. Bir tek problem, Windows ve Unix erişim hakları yöntemleri uyuşmaması. Chmod'u çalıştırdığınızda, komut bir sey yapmış gibi geri geliyor, fakat dosyada bir değişiklik olmuyor. Unix dosya haklarının Cygwin'de "simule" edilmesi için, cygwin.bat içine şunu eklemek lazım.
set CYGWIN=tty ntea
Bundan sonra
$ chmod 0600 id_rsa
.. ve bundan sonra ssh ve scp komutlarınız düzgün çalışacak.
Kaynaklar
[1] https://www.digitalocean.com/community/tutorials/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh
Yukarı