SSH Anahtarları
Konu başlıkları |
SSH Anahtarı Nedir?
SSH anahtarı (bir tane genel bir tane de özel) kullanarak, herhangi bir sunucuya veya sunuculara parolanızı girmeden rahatça giriş yapabilirsiniz.
Oluşturacağınız anahtarı parolasız kullanabilirsiniz; ancak kötü niyetli bir kullanıcı anahtarınızı (özel anahtarı) ele geçirirse bunu kullanabilir. Bu rehberde SSH anahtarlarınızı güvenli olarak nasıl kullanacağınız anlatılmaktadır.
SSH Anahtarlarını Oluşturmak
Öncelikle sisteminizde OpenSSH kurulu değilse kurun; zira kurulumda seçmemişseniz öntanımlı olarak kurulmamaktadır:
# pacman -S openssh
Anahtarlarınızı ssh-keygen komutunu vererek oluşturun:
$ ssh-keygen -b 1024 -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/kullanici/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/kullanici/.ssh/id_dsa. Your public key has been saved in /home/kullanici/.ssh/id_dsa.pub. The key fingerprint is: x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94 kullanici@makine
Öncelikle oluşturulan anahtarın nereye konulacağını soracaktır. Öntanımlı olarak ev dizininizdeki .ssh dizinine konmaktadır. Farklı bir konuma yerleştirmek istiyorsanız bu dizini belirtin. Öntanımlı değeri kullanmanızda herhangi bir sakınca bulunmamaktadır. Daha sonra eğer anahtarlarınızı bir parola koyarak korumak istiyorsanız kendinize bir parola belirleyin. Eğer boş bırakırsanız anahtarlarınıza parola konulmayacaktır.
Yukarıdaki komut yardımıyla 1024 bit uzunluğunda (-b 1024) genel/özel bir dsa (-t dsa) anahtar çifti oluşturmuş oldunuz.
Eğer dsa yerine RSA anahtar çift üretmek istiyorsanız, dsa yerine -t rsa kullanın. RSA kullanacaksanız "-b" ile uzunluk belirtmenize gerek bulunmamaktadır; zira RSA için öntanımlı anahtar uzunluğu 2048 bittir ve oldukça yeterlidir.
Anahtarı uzaktaki sunucuya kopyalamak
SSH anahtarınızı oluşturduktan sonra uzaktaki sunucuya genel anahtarınızı aktarmanız gerekmektedir. OpenSSH'de öntanımlı olarak bu anahtarın ~/.ssh/authorized_keys dosyasına yazılması gerekmektedir.
$ scp ~/.ssh/id_dsa.pub kullanici@uzakmakine:
Bu komutla genel anahtar olan id_dsa.pub uzaktaki sunucudaki ev dizininize kopyalanır. (Sondaki : işaretine dikkat edin).
Daha sonra uzaktaki sunucuda ~/.ssh dizinini oluşturun ve authorized_keys dosyasına genel anahtarı yerleştirin.
$ ssh kullanici@uzaktakimakine kullanici@uzaktakimakine's password: $ mkdir ~/.ssh $ chmod 700 ~/.ssh $ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys $ rm ~/id_dsa.pub $ chmod 600 ~/.ssh/authorized_keys
Son iki komutta uzaktaki makineye aktardığınız id_dsa.pub dosyası silindi (çünkü dosyaya yerleştirildi) ve authorized_keys için gerekli dosya izinleri tanımlandı.
Bu işlemleri yaptıktan sonra uzaktaki sunucudan çıkış yapıp tekrar giriş yaptığınızda anahtarınız için koyduğunuz parolayı soracaktır. Eğer parola koymamışsanız da doğrudan sunucuya giriş yapabilecektir.
$ ssh ras0ir@eventualis.org Enter passphrase for key '/home/ras0ir/.ssh/id_dsa':
Eğer anahtarınız ile giriş yapamıyorsanız, .ssh dizininin ve authorized_keys dosyasının izinlerini kontrol edin.
Anahtar Parolasını Hafızada Tutmak
Artık uzaktaki sunucuya parola yerine ssh anahtarınızla giriş yapabilir duruma geldiniz. Ancak anahtar için her seferinde parola girmek, anahtar olmadan parola girmekle neredeyse aynı olduğu için pratik değil gördüğünüz gibi. Bu noktada imdadınıza "SSH agent" yetişecektir ve SSH anahtarınızın parolasının hafızada tutulmasını sağlayacaktır.
ssh-agent
ssh-agent OpenSSH ile öntanımlı gelen bir ssh aracıdır.
$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK; SSH_AGENT_PID=2148; export SSH_AGENT_PID; echo Agent pid 2148;
ssh-agent'ı çalıştırdığınızda kullanacağı ortam değişkenlerini göstermektedir. Bu değişkenleri kullanmak için, komutu eval ile çağırın.
$ eval `ssh-agent` Agent pid 2157
/etc/profile dosyasına aşağıdaki komutu ekleyerek, oturum açtığınızda çalışmasını sağlayabilirsiniz:
# echo 'eval `ssh-agent`' >> /etc/profile
Bundan sonra ssh-agent çalışırken ssh-agent'a, özel bir anahtarınız olduğunu ve bu anahtarın nerede saklandığını belirtmeniz gerekiyor.
$ ssh-add ~/.ssh/id_dsa Enter passphrase for /home/kullanici/.ssh/id_dsa: Identity added: /home/kullanici/.ssh/id_dsa (/home/kullanici/.ssh/id_dsa)
Örnekte de gördüğünüz gibi anahtar parolası soruldu ve parola yazıldı. Şimdi uzaktaki sunucuya, anahtarınıza bir parola atamış olsanız bile herhangi bir parola yazmadan girebilirsiniz.
ssh-agent'ın tek dezavantajı açtığınız her konsolda ssh-add komutunu tekrar çalıştırmak zorunda kalmanızdır. Ancak bunun için keychain ve benzeri bir kaç çözüm yolu bulunmaktadır. keychain'i nasıl kullanacağınız aşağıda yazmaktadır.
GnuPG Agent Kullanarak
gnupg2 paketi içerisinde gelen GnuPG agent OpenSSH agent emulasyonu yapabilmektedir. Eğer GPG kullanıyorsanız, bütün anahtarlarınızı kontrol etmesi için gpg agent'ı kullanabilirsiniz. Ayrıca "PIN entry" ve parola yönetimini beğenebilirsiniz.
GPG agent'ı SSH anahtarlarınızla kullanmak için gpg-agent'ı --enable-ssh-support seçeneği ile çalıştırmalısınız. Örnek: (dosyayı çalıştırılabilir yapmayı unutmayın)
/etc/profile.d/gpg-agent.sh
#!/bin/sh
envfile="${HOME}/.gnupg/gpg-agent.env"
if test -f "$envfile" && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then
eval "$(cat "$envfile")"
else
eval "$(gpg-agent --enable-ssh-support --daemon --write-env-file "$envfile")"
fi
gpg-agent'ı çalıştırdığınızda ssh-add kullanarak anahtarlarınızı tıpkı ssh-agent'taki gibi onaylatabilirsiniz. Onaylanan anahtarlar ~/.gnupg/sshcontrol dosyasında saklanmaktadır. Anahtarınızı onayladıktan sonra, her parola girmeniz gerektiğinde "PIN entry" menüsü karşınıza gelecek ve parolanızı soracaktır. Parola önbelleği süresini ~/.gnupg/gpg-agent.conf dosyasında belirleyebilirsiniz. Örneğin parolayı 3 saat hafızada tutmak için dosyaya şunları ekleyebilirsiniz:
# Cache settings default-cache-ttl 10800 default-cache-ttl-ssh 10800
Bu dosyada ayarlayabileceğiniz diğer seçenekler ise PIN entry için kullanılacak arayüz (GTK, QT veya ncurses), keygrab vb.
# Ortam dosyası write-env-file /home/username/.gnupg/gpg-agent.info # Klavye kontrolü #no-grab # PIN entry programı #pinentry-program /usr/bin/pinentry-curses #pinentry-program /usr/bin/pinentry-qt4 pinentry-program /usr/bin/pinentry-gtk-2
keychain kullanımı
Keychain bir veya birden fazla özel anahtarı kontrol edebilir. Çalıştırdığınız zaman özel anahtarlar için parola sorar ve bu parolayı saklar. Böylece her defasında parola yazma zahmetinden kurtulursunuz.
keychain'i kurmak için şu komutu girin:
# pacman -S keychain
Aşağıdaki dosyayı oluşturun ve çalıştırılabilir yapın:
/etc/profile.d/keychain.sh
eval `keychain --eval --nogui -Q -q id_rsa`
veya
/etc/profile.d/keychain.sh
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_dsa [[ -f $HOME/.keychain/$HOSTNAME-sh ]] && source $HOME/.keychain/$HOSTNAME-sh
Eğer gerekiyorsa, ~/.ssh/id_dsa'yı ~/.ssh/id_rsa ile değiştirin. Bash harici bir kabuk kullanıyorsanız, keychain --help veya man keychain'i inceleyerek diğer kabuklarla nasıl kullanacağınızı öğrenebilirsiniz.
Gerekli düzenlemeleri yaptıktan sonra yeni bir konsol açın. Keychain çalışacak ve belirttiğiniz özel anahtar için parolanızı soracaktır.
ssh-agent ve x11-ssh-askpass kullanımı
Her Xsession çalıştırdığınızda ssh-agent'ı çalıştırmanız gerekmektedir. X oturumu sona erdiğinde ssh-agent da kapanacaktır.
x11-ssh-askpass paketini kurduğunuzda, her Xsession çalıştırdığınızda parolanızı sorabilir:
# pacman -S x11-ssh-askpass
~/.xsession dosyanıza şunları ekleyin:
eval `/usr/bin/ssh-agent` SSH_ASKPASS=/usr/lib/openssh/x11-ssh-askpass ssh-add < /dev/null # then the end of the file with for example "exec dwm"
GNOME Keyring
Eğer GNOME masaüstü kullanıyorsanız, GNOME Keyring aracını SSH agent olarak kullanabilirsiniz. Kurulumu ve ayarlanması basittir, öncelikle kurun:
# pacman -S gnome-keyring
Daha sonra anahtarlarınızı ekleyin:
$ ssh-add ~/.ssh/id_dsa Enter passphrase for /home/kullanici/.ssh/id_dsa:
Herhangi bir sunucuya bağlandığınızda anahtarınız bulunacak ve sizden parolanız istenecektir. GNOME keyring'in anahtarı hatırlama/kilitleme seçeneğini kullanarak bir daha parola yazmanıza gerek kalmayacaktır.
PuTTY
PuTTY ssh-keygen tarafından oluşturulan anahtarları doğrudan kullanamamaktadır. Özel anahtarınızı PuTTY ile kullanabilmek için PuTTYgen kullanarak PuTTY'nin biçimine dönüştürmeniz gerekmektedir. PuTTYgen'i buradan indirebilirsiniz.
Şu aşamaları takip ederek PuTTY'de anahtarlarınızı kullanabilirsiniz.
- ssh-keygen kullanarak 1024 bit RSA anahtar çifti oluşturun.
- Genel anahtarı
~/.ssh/authorized_keysdosyasına koyun. - Özel anahtarı Windows kullanan bilgisayara kopyalayın.
- Özel anahtarı PuTTYgen ile açıp Save private key seçeneğine tıklayın. Böylece anahtar PuTTY biçimine dönüştürülür.
- PuTTY'i çalıştırın. SSH→Auth menüsüne gidin ve özel anahtarı seçin.
Harici Bağlantılar / Bilgi
- SSH with Keys HOWTO
- HOWTO: set up ssh keys
- OpenSSH key management, Part 1
- OpenSSH key management, Part 2
- OpenSSH key management, Part 3
- Getting started with SSH
- Manual Pages: ssh-keygen(1)
- Sharing SSH keys on 2 linux servers
- How to set up SSH keys: Frustration with "Server refused our key" [PuTTY]
- Securing your secure shell (SSH) service