Kendi meşrebinde hem blog, hem Türkçe dökümantasyon

Etiketler

27 Ağustos 2009 Perşembe

Macports, ssh otomatik tamamlama ve genel bilgiler

Daha önceki yazılarımda da bahsetmiştim, MacPorts diye harika bir şey var! Linux ( debian,ubuntu vs... ) daki paket yönetiminin macos-x'cesi. Tonlarca ( abartmiim, yazıyı yazdığım anda toplam 6133 adet ) uygulama, ağırlıkta linux-unix dünyasının çok sık kullandığı, macos-x için port edilmiş halde bizi bekliyor!

Peki bu uygulamalar bana ne sağlar?

Eğer development'la uğraşıyorsanız zaten faydalarını saymakla bitiremem. Eğer standart bir kullanıcıysanız bile, pek çok "işe yarar" uygulama edinebilirsiniz. Unutmadan belirteyim, bu uygulamaların hepsi "open source" ( açık kaynak ) uygulamalar. Bu bakımdan hem kaynak kodu açık, hem de ücretsiz. Hem de sürekli güncelleniyor.

Dedim ya, eğer yazılım geliştirme işleriyle uğraşmıyorsanız nasıl faydalanacaksınız? İlk aklıma gelen şey, eskiden kalma Mustek CU 1200 scanner'ım. Evet, ben bu cihazı, windows/pc ile uğraşırken satın almış ve windowsXP dışında hiç bir windows'da çalıştıramamıştım. Hatta support'larına mesaj atmış ve "sadece XP'de çalışır" cevabını almıştım. Tabi bunun üzerine odamdaki dolapta, hurdaların yanında yerini almıştı. Taaki macports'a kadar.

S.A.N.E adında , "open source" geliştirilen proje ( Scanner Access Now Easy ) sayesinde, uzunca yıllar kullanamadığım scanner'ımı, mac'de, terminal üzerinden kullanmaya başladım. Hatta işin komik tarafı, daha önce 600dpi tarama yapmayı başaramamıştım! Scanner'ı bağlayıp, Terminal'i açıp :
$ scanimage -v -p --format tiff --mode color --resolution 300 > test300.tiff
yazınca, 300dpi - tiff şeklinde scan edilmiş resim. Derseniz ki, "Kardeşim ben terminal filan anlamam, yok mu bunun kolayı?" evet o da var. http://www.ellert.se/twain-sane/ sitesinde, aynen macports'da bulunan uygulamanın gui'li hali de var. Prefpane'i filan da mevcut, kolay konfigüre edilebiliyor.

Konuyu süper dağıttığımı görüyorum ve hemen asıl mevzuya dönüyorum. Geçenlerde, "bash-completion" konusuna değinmiştim. Hatta bununla da kalmayıp Django için nasıl otomatik tamamlama yapılabileceğini de yazmıştım. ssh üzerinden tünel yapma işlerini denerken sevgili iş arkadaşım Fırat Can Başarır bana ssh_config hakkında tips & tricks verirken aklıma hemen şu soru geldi : "Acaba uzaktaki makineyi ssh üzerinden browse ederken tab-completion olabilirmi?" ya da "nasıl olur?"

Bash haricinde, ZSH'de bunun mümkün olduğunu sevgili kardeşim Can Burak Çilingir sayesinde biliyordum. Acaba aynısını bash için yapmak mümkünmüydü?

Eğer konuya zaten hakimseniz, ssh_config diye bişi biliyorsunuzdur. Genelde bu tarz konfig olayları hep birbirine benziyor mantık olarak;
  • System-Wide ( yani tüm kullanıcıları ilgilendiren, /etc/ altında genelde )
  • User Profile ( sadece kullanıcı bazında ~ altında )
Kullanıcı bazlı şeyler genelde $HOME dizini altında oluyor; yani :
$ ~
$ /Users/KULLANICI_ADINIZ/
$ echo $HOME
$HOME sizin kullanıcınızın "home" folder'ıdır. Yani sizinle ilgili pek çok şey ( Desktop , Müzikler , Videolar vs... ) buradadır. Keza ssh ile ilgili şeyler de ( eğer kullanıcı bazlı düşünüyorsak ) burada olmalıdır. Terminal'e girip;
$ ls
dediğimiz zaman gördüğüm ekran;

gibiyse sorun yok, eğer değilse;
$ ls -alhG
Şeklinde deneyin. Bu, ne var ne yok listelemenize, hatta renkli ve hatta boyutları da anlaşılır bir şekilde listelemenize yardımcı olacak. Eğer ls komutunuzun hep böyle kalmasını isterseniz, .profile'a bir alias eklemeniz lazım. Eğer $HOME'da .profile yok ise önce oluşturun;
$ cd ~
$ touch .profile
Eğer ~ işaretini yapmakta sorun varsa, "Turkish QWERTY PC" modunda, alt + ü yapın. Sonra, sevdiğiniz bir text editörde bu dosyayı açın. Örnek :
$ open -a /Applications/TextEdit.app .profile
Dosyayı açtıktan sonra aşağıdaki bilgiyi ekleyin , kaydedip çıkın programdan. ( Ben text editör olarak TextMate kullanıyorum, belki yazıyı okuyanlar da yoktur diye standart / default uygulamalardan örnek veriyorum! )
alias ls='ls -alhG'
Şimdi ya terminal'i komple kapatıp açacaksınız, ya da
$ source .profile
yazın enter'a basacaksınız. Şimdi ls yaptığınızda tüm detaylarıyla $HOME folder'ını görebilirsiniz. Eğer .ssh diye bir folder yoksa hemen bunu oluşturun ve gereken dosyaları ekleyin :
$ cd ~
$ mkdir .ssh/
$ touch config
Şimdi bu config dosyasına, ssh yapmak istediğimiz sunucuya ait bilgileri ekleyeceğiz. Tabii bunun için yine bir text editör ile dosyayı açalım. Açtıktan sonra;
Host SUNUCU_ADI
User KULLANICI_ADI
Port SSH_PORTU
HostName SUNUCU_IP
şeklinde uygun bilgileri doldurun. Unutmayın! Bu dosyanın mantığı Key Value şeklinde. Key'den sonra ya bir TAB ya da SPACE koymanız lazım. Ben TAB kullanıyorum. Örneğin ip'si 1.2.3.4 olan bir sunucuya, 22.port'dan ssh yapacaksak ve bu sunucuya "Sunucum" diye bir isim takarsak;
Host Sunucum
User vigo
Port 22
HostName 1.2.3.4
Eğer Port belirtmezseniz sistem bunu otomatik olarak 22 varsayacaktır. Bu dosyada N tane sunucu tanımlaması yapılabilir. Yani;
Host Sunucum1
User vigo
Port 22
HostName 1.2.3.4

Host Sunucum2
User vigo
Port 22
HostName 10.20.30.40
gibi, istediğiniz kadar sunucu ekleyebilirsiniz. Keza, konfigürasyon bilgisi olarak da, Host,User,Port vs... dışında pek çok direktif de ekleyebilirsiniz. Bu bilgiler nerede? Tabii ki man page'de!
$ man ssh_config
demeniz yeterli...

Eğer bunların hiç biri olmasaydı nasıl bağlantı yapacaktık?
$ ssh vigo@1.2.3.4
şeklinde. Hemen yeri gelmişlen şunu da anlatalım. Uzaktaki makineye bağlanırken sürekli şifre girme derdinden kurtulmak için kendinize bir ssh-key üretebilirsiniz. Bu ürettiğiniz key'i de uzaktaki makineye eklediğiniz zaman , ssh bağlantısı için birdaha size şifre sorulmaz. Nasılmı? Terminal'de devam ediyoruz;
$ ssh-keygen -t dsa
Enter'a basar basmaz "Generating public/private dsa key pair." şeklinde bir mesaj görüceksiniz. Komut size iki anahtar üretiyor, biri public diğeri de private. Yani biri ortalıkta dolaşabilen, PUBLIC key, diğeri de sadece sizde olacak olan PRIVATE key. Daha sonra size, bu oluşturulacak anahtarların nereye kayıt edileceği soruluyor. Gördüğünüz gibi bu lokasyon, default olarak, $HOME altında bulunan .ssh/ folder'ı. Örneğin bana sorulan yer : /Users/vigo/.ssh/id_dsa şeklindeydi.

Daha sonra "passphrase" sorulur. Bu bir tür şifredir ve güvenlik için önemlidir. Bu bakımdan bu alanı boş bırakmadan , hatırlayabileceğiniz bir şifre seçin. Herşey yolunda gittiyse size :
The key fingerprint is:
fe:82:ea:3d:c4:..:..:.. user@hostname ( uzun olduğu için hepsini yazmadım! )
The key's randomart image is:
+--[ DSA 1024]----+
|E |
|. |
|. |
| . |
|o+ o S |
|* o.. +. |
| +oo o .. |
|ooo...o .. |
|=..+o... .. |
+-----------------+
şeklinde bir görüntü çıkar ve .ssh/ altına baktığınızda iki dosya ile karşılaşırsınız :
$ ls .ssh/
id_dsa
id_dsa.pub
işte bu sonu .pub ile biten dosya sizin PUBLIC key'inizdir. Eğer bu dosyayı text editörle açarsanız karşınıza;
ssh-dss AAAAB3NzaC1kc3MA...... user@hostname
şeklinde devasa bişi çıkar. ( Ben uzun olduğu için sadece minik bir kısmını yazdım. ) Şimdi yapmanız gereken, uzaktaki makine'ye bağlanıp, oradaki $HOME'unuza gidip, .ssh/ in altında ( eğer yoksa touch ile authorized_keys diye oluşturun! ) bulunan authorized_keys dosyasına bu id_dsa.pub'ın içinde yazanı ekleyin. Karşı makinede, en basit text editörü "nano" yardımıyla bunu yapabilirsiniz. Dikkat edilmesi gereken şey, bu up upuzun tek bir satır şeklinde olmalı! ( word-wrap'e dikkat edin! )



Kendi tarafınızda elma ( cmd ) + c kopyalayıp, uzaktaki makinede de elma ( cmd ) + v ile yapıştırabilirsiniz. Eğer nano kullanmayı bilmeyenler varsa, uzaktaki makineye bağlanınca;
$ nano -w .ssh/authorized_keys
ile nano'yu açın. elma ( cmd ) + v ile key'inizi yapıştırın, satır sonunda enter yapın. "Save" edip çıkmak için kntrl + x, sorulan soruya y cevabı ve enter. Hemen test edelim bakalım olmuşmu?
$ ssh Sunucum1
Enter! evet şifre sormadan bağlandınız! kntrl+d ile bağlantıyı kesebilirsiniz.

Bu kadar açıklamadan sonra, asıl olayımızıa gelelim. Uzak makineyi tamamlama! Aynı ssh komutu familyasından scp ile tanışacağız birazdan. Sistemde default bulunan cp ( copy ) komutunun secure olanı! Gerekenler;

macports ( bu zaten kurulu diye düşünüyorum ) ve ilgili portları :
  • bash-completion
  • gawk
  • gsed
Normalde bash-completion kurulunca zaten pek çok sorun halloluyor. Fakat, sistemin içindeki awk/sed, bir sebebten dolayı, ssh'i tamamlayamıyor. Bu bakımdan ports'dan gawk ve gsed paketlerini de kurmamız gerekiyor.
$ sudo port install bash-completion gawk gsed
( eğer bash-completion önceden kuruluysa sadece gawk ve gsed i kurun )

Şimdi yapmanız gereken tek şey : ssh [TAB'e basın] config'den ya da /etc/hosts'dan otomatik tamamlama başladı bile... Peki scp? şimdi scp Sunucum1[TAB'e basın] ve basmaya devam edin!

Hiç yorum yok:

Yorum Gönder

İzleyiciler

Blog Listem

Yazılacak Yazılar

  • Snow Leopard için service yazıyoruz!
  • MacPorts nedir?
  • Virtualbox , Ubuntu ve Host'da duran web folder'ı
  • Django'ya giriş?
  • Dashcode ile MobileSafari uygulaması
  • Quicklook için Plug-in yazalım?
View blog authority