Nasıl - OpenSSH ile Grafik Ekranı Aktarmak

Başlatan plymouth, 10 Şubat 2011 - 17:41:13

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

plymouth

        Linux hayatımızın bir parçası olduğundan beri eminim hepimiz çok şey denemiş ve öğrenmişizdir. Bu defa da SSH tarafına yelken açalım. Denetimimiz altında bulunan makinalardan bir başkasına bağlanalım ve neler yapabiliyoruz bi görelim. Yaparken de öğrenmeye devam.

Ubuntu & Debian ile default gelen ssh sistemi yerine OpenSSH paketlerini kurarak başlayalım.

#sudo apt-get install openssh-server openssh-client


Sisteminizden bazı paketlerin kaldırılacağını ve yerine bazı yeni paketlerin kurulacağını söyleyen uyarıdan sonra;

#sudo vi /etc/ssh/sshd_config

dosyasının içerisinde, aşağıdaki satırın önündeki  "#" işaretini kaldırın ve şöyle görünmesini sağlayın. Ben editör konusunda kişisel tercihimi Vim'den yana kullanıyorum ama siz başka biri ile de aynı şekilde dosyayı değiştirebilirsiniz.

X11Forwarding yes


Bu satırı değiştirdikten sonra dosyayı kaydedip çıkın. Makinanızda aşağıda ki komutla bir key çifti oluşturun.

#ssh-keygen

Komutu uygulama esnasında sizden bu keyi kaydetmek için bir yol girmenizi, bu key için bir şifre girmenizi isteyecek. Default hellerinde kalmalarında herhangi bir sıkıntı olmaz. Şifre girip, girmemek size kalmış ama gireceğiniz şifreyi daha sonra bağlantı yapacağınızda sizden isteyecektir. Eğer bir script yardımıyla düzenli olarak aynı noktalar arasında bağlantı yapmak ve hedef makinalarda otomatize olmuş işlemler çalıştırmak gibi bir niyetiniz varsa burada bir şifre girmezseniz daha iyi olur. Böylece yazacağınız script & programlar, kolayca karşı tarafa bağlanıp gereken işlemleri yapabilirler.

Yukarıdaki komut ile default olarak RSA tipi şifreleme (encryption) ile bir çift key oluşturulur ve bit derinliğide 2048 bittir. Eğer isterseniz bu encryption tipini DSA ile değiştirebilirsiniz ancak DSA da maksimum 1024 bit derinlikte şifreler oluşturabilirsiniz. Sistem şifre oluştururken /dev/urandom, /dev/random gibi aygıtlardan gelen verileri ayrıca mouse hareketlerini, kullanıcıya ait bilgileri de (başka kaynaklar da var) ele alarak benzersiz bir şifre oluşturur. Oluşturduğu bu key çiftleri için size bir parmak izi sunar. Yani ekranınıza text olarak hazırlanmış bir çerçeve içerisine ascii karakterler ile oluşturulmuş bir resim basılır. Olur da bu keyi değiştirmek isterseniz aynı işlemi tekrarlamanız yeterli olacaktır. Bu durumda mevcut key çiftinin üzerine yazacağını söyler. Yeni şifrenizi kullanmak için onaylamanız yeterli olacaktır. Oluşturulan anahtar çiftlerine, dafault kayıt yeri olan, kullanıcı dizini altında ki ".ssh" dizini içerisinden ulaşabilirsiniz. Burada "id_rsa" ve "id_rsa.pub" isimli iki dosya ve "known_hosts" isimli bir de dizin bulunur.Sırasıyla, id_rsa sizin private (kişisel); id_rsa.pub ise sizin public (paylaşılabilir) keyinizdir. Keyler için son birkaç şey daha! Key çiftleri bir birlerini açabilir. Her ikisi de eşit öneme sahiptir. Matemetiksel olarak bu keyler birbirlerine bağlıdırlar. Birisi ile şifrelenen diğeri ile açılabilir. Hangisi olduğunun önemi yoktur. Bu keylerden birisini dağıtıp, diğerini kendinize saklayabilirsiniz. Ancak sisteminiz, kendisi otomatik olarak bunu yaptığı için bu duruma müdahale etmeyin ve id_rsa.pub isimli keyin dağıtılabilir key olduğunu ve sistemin bunu dağıtma, diğerini de "id_rsa.pub" ile şifrelenmiş paketleri açmak için kişisel key olarak kullanma eğiliminde olduğunu unutmayın. Key dağıtma işini elle yapmak dikkat ister. Şifrelemek için kullanılan anahtar ile aynı paketi açamazsınız. Açmak için diğerine anahtara ihtiyacınız var.

Sonraki adıma geçmeden önce SSH ve çalışma şekline biraz değinelim. Bir makinaya bağlanmak istediğinizde, makinanız önce karşı tarafla bağlantı kurar ve onun parmak izini alır. Parmak izinin değiştiği durumlarda var. Mesela siz sizteminizi silip yeniden yüklediğinizde -formatlamak- veya yeni bir key çifti ürettiğinizde bu parmak izi de değişir. (Aslında bu noktada IP adresinin de önemli bir görevi var biraz daha sabır.) Makinanız, hedefler ile ilk kez yaptığınız bağlantılar için şuna benzer bir çıktı üretir ve sorar; "Bu parmak izini bilinen hostların arasına kaydedeyim mi?"

$ ssh root@192.168.0.75
The authenticity of host '192.168.0.75 (192.168.0.75)' can't be established.
RSA key fingerprint is 16:41:be:8e:92:70:c2:74:4f:37:c3:9d:c3:ef:85:a1.
Are you sure you want to continue connecting (yes/no)?


"Yes" cevabını vermeniz ile birlikte  karşı tarafın RSA keyine ait parmak izi kullanıcının dizini altında bulunan ".ssh/known_hosts" dosyasına kaydedilir. Evet demeniz daha sonra yapacağınız bağlantılar için önemli.

Warning: Permanently added '192.168.0.75' (RSA) to the list of known hosts.

Parmak izinin ne anlamı olduğuna değinelim. Bu parmak izi bir saldırı tekniği olan "aradaki adam" -Man in the middle- saldırısından korunmak için tasarlanmıştır. Her makinanın kendine ait bir parmak izi vardır ve bu parmak izinin oluşumuna etki eden çok sayıda da etken vardır. (İşletim sistemi, sistemin kuruluş zamanı, bağlandığınız interface, donanımı vs.) Yukarıda ki soruya evet dediğinizde karşı makina ile yaptığınız ilk bağlantıda alınan parmak izi ile o anki parmak izi karşılaştırılır uyumluluk sağlanıyorsa bağlanmak için sonraki adım olan key değiş-tokuşu yapılır. İşte SSH'da IP adresinin gerçek önemi burada ortaya çıkıyor. İlk bağlantıda karşı tarafın parmak izi alınır ve bu parmak izi bir dosyada saklanır demiştim. Bu parmak izi filan IP numaralı makinaya aittir diye işaretlenerek saklanır. Karşı taraftaki makina ip adresini değiştirirse bağlanmak için gereken ilk adım da elinizdeki IP adresi de farklı olacağı için, hedef makinanın parmak izini yeniden bilinen hostlar arasına dahil eder ve yola devam edersiniz. Ama ya Ip adresi değişmemiş fakat hedefin parmak izi daha evvel alınan parmak izine uymuyorsa? Basit anlamda parmak izini değiştirebilecek 2 ihtimal var.

    * Hedef üzerinde köklü bir değişiklik yapılmıştır. (Format vs.)
    * Hedef ile aranızda, trafiği dinleyen birisi vardır. (Man in the middle)

Bu durumda makinanız sizi uyarır. (Size bu durumu gösterebilmek için biraz gayret sarfettim ama ne yazık ki daha evvel karşılaştığım uyarıları oluşturamadım. Ama bunun olduğunu bilmelisiniz.)

Burada anlatmayı hedeflediğim şey ile doğrudan bağlantılı olmasına rağmen konunun çok dışına çıkacağından "Man in the middle" konusunu burada keseceğim ve hiç bir sorun olmadan ve karşıya bağlanmamızı sağlayacak senaryo üzerinden gideceğim.

Karşı tarafa login olmak için şu komut yeterli olacaktır.

#ssh root@192.168.0.80

Sonrasında hedef üzerinde "root" kullanıcısına ait şifreyi girerek login olabilirsiniz. Buna biraz daha yakından bakalım. Ilk bağlantıyı yaparken aldığımız Ip adresine karşılık parmak izi ile bağlanırken aldığımız parmak izi aynı ise bu hedefin düşündümüz ve bağlanmak istediğimiz kişi olduğunu artık biliyoruz. Doğal olarak artık public keyleri bir birimiz arasında paylaşabiliriz. Public keyleri verdiğimiz anda şunu söylemiş oluruz.
"Artık bana yolladığın paketleri, sana verdiğim key ile şifrele. Ben de sana yolladığım paketleri bana verdiğin key ile şifreleyeceğim."
Paketlerimiz olması gerektiği gibi şifreli olarak gidip gelecek. Bu nokta da bir ilave daha yapayım. Tcp/IP de bağlantı kurulunca bağlantı kuran taraflar arasında bir session (oturum) açılır. SSH bu session için ilave olarak 768 bitlik bir key üretir ve paketleri bu key ile tekrar şifreler. Dahası her 1 saat için, bu key yeniden oluşturulur ve yenisiyle değiştirilir.

       Herhangi bir sorun olmadan karşı tarafa bağlandığımıza göre işin yarısını hallettik demektir. İyi haber, sıradan bir SSH oturumu kurmak için buraya kadar anlatılanlar yeterlidir. Sadece 2-3 satır komut ile yapılan iş aslında ne kadar da uzun değil mi?
       Karşı taraftaki makinaya bağlandığımıza göre işlemleri bu bağlantı üzerinden de yapabiliriz. Kendimize ait olan public keyi hedef makinanın bağlanılan kullanıcısına ait "home" dizini (root oturumunda "/root", diğerleri için /home/"user_id") altında bulunan .ssh/ dizini altına "authorized_keys" isimli bir dosya oluşturup içerisine kaydedelim. Burada Vi kullanıcıları için kopyalama ve yapıştırma işlemlerinde dikkat edilmesi gereken bir ayrıntı var. Yapıştırmadan önce mutlaka "insert" moda geçin. Yoksa bağlanamazsınız. Bağlanmaya engel olan vi değil, insert moda geçmeden keyi yapıştırmanız sebebiyle bu key içerisinde i,a gibi insert moda geçiş yaptıran karakterlere gelene kadar ki kısımların dosyaya alınmaması nedeniyle eksik key aktarmanızdır.
       Sorun yoksa artık bağlanmak için ssh root@"hedef_makina_IP" yazınca sizden login olmak için şifre istemeyecek ve hemen bağlanacaktır.
Bu sayede bundan sonra bu iki makina arasında kullanacağınız scp ve ssh komutları için de şifre girmeniz gerekmeyecek.
       Peki ya ekran görüntüsü?  Sanırım bu, anlatım içinde ki en kolay yer. Bağlantı yaparken atık komutu aşağıda ki şekilde verirseniz, çalıştıracağınız komutlarla karşı tarafın ekranı üzerinde hiç bir şey olmadan tüm görüntü size aktarılacak. Mesela firefox'u çalıştırdığınız da karşı makina internete bağlanacak ama görüntü sizde olacak. İş yerinizde bazı engellemeler yüzünden istediğiniz gibi sörf yapamıyorsanız bu iyi bir çözüm olabilir. Tabi bunu yapmadan önce evdeki makinanıza erişebiliyor olmanız da gerekli ki o da başka bir yazının konusu. Örnekleri çoğaltmak mümkün.
Windows üzerinden de bu yapılabilir ama putty isimli programın Xorg paketlerini içeren bir kopyasını kurmanız gerekli. Bağlanacağınız hedef te Xserver o an için çalışmıyor olsa bile -Xserver kurulu ama çalışmıyor diye düşünün- bunu yapabilirsiniz. Sanırım bu da server sistemlerine hitap eden bir çözüm. Serveriniz de XServer kurulu olsun ama GDM yada onun yerine kullanacağınız bir program kurmazsanız açıldığında direkt olarak grafik ekrana geçmeye çalışmaz. Böylece siz de serverinize bağlanıp grafik ekrandan onu yönetebilirsiniz.  Say say bitmeyecek nimetleri var sanırım SSH'ın. Komutu da yazalım ki eksik olmasın :)

#ssh -Y root@"hedef_IP"


Red Hat, Debian ve Ubuntu ile denenmiştir.
This life is not the real thing.
It is not even in Beta.
If it was, then OpenBSD would already have a man page for it