7.04.2011

OpenSSH'a özel anahtarla bağlantı

Elimizde çalışan bir openssh sunucumuzun olduğunu varsayarak bu sunucuya bir sertifika ile bağlanmak için gereken adımları anlatacağım.

Bu yönteme her yerde şifresiz giriş deniyor. Yani girişte kullanıcı adınıza ait bir şifre kullanmayacaksınız. Ama biraz sonra değineceğim gibi, aslında tamamen şifresiz bir bağlantı çok da tavsiye dilen birşey değil.

Önce Ubuntu server'a, sertifika ile giriş yapmasını istediğimiz kullanıcı ile giriş yapalım. Daha sonra OpenSSH ile gelen ssh-keygen'i çalıştırıp kendimize bir sertifika oluşturalım.

metin@ubuntu:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/metin/.ssh/id_rsa):
Created directory '/home/metin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/metin/.ssh/id_rsa.
Your public key has been saved in /home/metin/.ssh/id_rsa.pub.
The key fingerprint is:
75:34:fe:7f:68:48:e7:d2:fe:73:03:66:c8:a9:a7:88 metin@ubuntu

ssh-keygen'i hiçbir parametre vermeden çalıştırdığınızda yukarıdakine benzer bir çıktı olur. Önce mavi ile işaretlediğim satırlarda profil klasörünüzün altında .ssh klasörünü (gizli) yaratarak genel anahtar (public key) ve özel anahtarlarınızı (private key) varsayılan olarak bu klasöre kaydeceğini bildirir. Daha sonra kırmızı ile işaretlediğim satırlarda özel anahtarınızı kriptolamak için bir passphrase sorar. Bunun 4 karakterden uzun olması gerekir. Ama boş da geçebilirsiniz :)

Ardından yeşil ile işaretlediğim satırlarda da genel anahtarınızın .ssh/id_rsa.pub dosyasına, özel anahtarınızın da .ssh/id_rsa dosyasına kaydedildiğini belirtip anahtar parmak izini yazarak sonlanır.

Özel anahtarınızın sadece sizin erişebileceğiniz güvenli bir yerde saklanması ve uzaktan güvenli bağlantı yapacağınız sırada erişebileceğiniz bir yerde olması gerek. Bunu sunucuda bırakmamak gerek. Genel anahtarınızı ise genel erişime açık herhangi bir yerde bırakabilirsiniz. Asimetrik şifreleme tekniklerine göre birisinin sadece genel anahtarınıza erişmesi sakıncalı bir durum değildir. Genel anahtarınızı, OpenSSH sunucuda ilgili kullanıcı profilinin altında .ssh klasöründe authorized_keys ve authorized_keys2 dosyalarında saklanmalı. ssh-keygen bu bilgiyi ida_rsa.pub'ya kaydettiği için şu komutları kullanabiliriz

cd .ssh
mv ida_rsa.pub authorized_keys
cp authorized_keys authorized_keys2

authorized_keys2 dosyası authorized_keys dosyasının aynısı olmalı. Daha güvenli olan ssh2 protokolü authorized_keys2 dosyasını dikkate alıyor. ssh1 protokolüne izin vermiyorsanız authorized_keys dosyasına ihtiyacınız olmayabilir.

Uzaktan bağlantı yapacağınız bilgisayar Windows ise openssh client olarak grafik arayüze sahip PuTTy'yi kullanabilirsiniz. Ama bunun için önce özel anahtarımızı putty'nin kullanabileceği formata dönüştürmemiz gerek. Bunun için kullanılabilecek araç puttygen. Önce puttygen ile özel anahtarı yükleyip (File>Load Private Key) daha sonra da onu tekrar ppk formatında kaydetmek gerek.



Daha sonra putty'yi kullanarak soldaki menüden Connection>SSH>Auth kısımna gelerek "Private key file for authentication" bölümündeki Browse'a basarak bir önceki adımda yaratılan ppk dosyasını göstermek gerek.


Eğer Linux'tan bağlanacaksanız bu dönüşümü yapmanıza gerek yok. Sadece openssh-client paketini yüklemiş olmanız gerek. Bir terminal penceresi açarak buraya

ssh -i .ssh/ida_rsa username@computername

yazmanız yeterli olacaktır. Elbette çoğu durumda buraya başka switch'ler de yazmak gerekir. Örneğin port yöneldirmesi yapmak için -L switch'ini, standart 22 portunun dışında başka bir port kullanmak için -p switch'ini kullanabiliriz. Bu durumda

ssh -i .ssh/ida_rsa -p 7022 -L 9999:computername:25 username@computername

komutuyla uzaktaki computername bilgisayarına 7022 ssh portundan (sunucu üzerinde ilgili ayarın yapılmış olması gerek) bağlanıp, yerel bilgisayardaki 9999 portunu uzak bilgisayardaki 25 portuna yönlendirebiliriz. Bu son yazdığım satır bize çok önemli iki şey sağlıyor:
  1. İnternet üzerinden uzaktaki herhangi bir bilgisayara güvenliği olmayan bir bağlantı ile bağlanmak zorunda kalmıyoruz. Her türlü TCP bağlantısını güvenli ssh kanalından yapabiliriz.
  2. Uzaktaki bilgisayarın herhangi bir servisine erişmek için firewall üzerinde çok sayıda port açmaya gerek yok. Sadece ssh portu (bizim durumda 7022) açmak yeterli. Bundan sonra her türlü port yönlendirmesini yapabiliriz.
Her eve lazım.

Hiç yorum yok: