OpenSSH ile macOS, Linux ve Windows Subsystem for Linux (WSL) Üzerinde SSH Anahtarları Oluşturma
SSH (Secure Shell) anahtarları, sunuculara, Git depolarına ve diğer uzak sistemlere güvenli, parola gerektirmeyen erişim sağlamanın temelini oluşturur. Geleneksel parola tabanlı kimlik doğrulamanın aksine, SSH anahtarları çok daha güçlü bir güvenlik katmanı sunar ve otomasyon süreçlerini kolaylaştırır. Bu kapsamlı teknik makalede, OpenSSH kullanarak macOS, Linux ve Windows Subsystem for Linux (WSL) ortamlarında SSH anahtar çiftlerini nasıl oluşturacağınızı, yöneteceğinizi ve güvenli bir şekilde kullanacağınızı ayrıntılı olarak ele alacağız.
SSH Anahtarları Neden Önemlidir?
İnternet üzerinden veya yerel ağlarda sistemlere erişim sağlarken güvenlik her zaman en büyük önceliktir. Geleneksel parola tabanlı kimlik doğrulama yöntemleri, çeşitli zayıflıklara sahiptir:
* Zayıf Parolalar: Kullanıcılar genellikle kolay tahmin edilebilir veya kısa parolalar kullanır.
* Kaba Kuvvet Saldırıları: Saldırganlar, parolaları tahmin etmek için otomatize araçlar kullanabilir.
* Ortadaki Adam Saldırıları (Man-in-the-Middle): Güvenli olmayan ağlarda parolalar ele geçirilebilir.
* Parola Sızıntıları: Bir hizmetten sızan parolalar, başka sistemlerde de kullanılabilir (credential stuffing).
SSH anahtarları, bu sorunların çoğunu çözerek daha güvenli ve pratik bir alternatif sunar. Asimetrik şifreleme prensibine dayanır; yani bir özel anahtar (private key) ve bir genel anahtar (public key) çiftinden oluşur.
SSH Anahtar Çifti Nasıl Çalışır?
SSH anahtar çifti, kriptografik olarak birbirine bağlı iki dosyadan oluşur:
1. Özel Anahtar (Private Key): Bu anahtar, yalnızca sizin tarafınızdan erişilebilir olmalı ve kesinlikle gizli tutulmalıdır. Genellikle bir parola (passphrase) ile korunur. Özel anahtarınız olmadan kimse sizin adınıza kimlik doğrulaması yapamaz. Dosya izinleri genellikle 600 veya 400 olarak ayarlanır, yani sadece sahibi tarafından okunabilir olmalıdır.
2. Genel Anahtar (Public Key): Bu anahtar, paylaşıma açıktır ve erişmek istediğiniz sunuculara veya hizmetlere kopyalanır. Sunucu, bu genel anahtarı kullanarak sizin özel anahtarınızla gönderdiğiniz şifrelenmiş mesajı doğrulayabilir. Genel anahtarın sızdırılması, özel anahtarınızın güvenliği sağlandığı sürece bir risk oluşturmaz.
Kimlik Doğrulama Süreci:
1. Bir sunucuya SSH ile bağlanmaya çalıştığınızda, sunucu sizin genel anahtarınızı ~/.ssh/authorized_keys dosyasında arar.
2. Bulduğunda, rastgele bir mesajı sizin genel anahtarınızla şifreler ve size gönderir.
3. Sizin SSH istemciniz, bu mesajı özel anahtarınızla çözer ve orijinal mesajı sunucuya geri gönderir.
4. Sunucu, gönderdiği mesajın doğru bir şekilde çözülüp çözülmediğini kontrol eder. Eğer doğruysa, özel anahtarın sizde olduğunu anlar ve bağlantıya izin verir.
5. Eğer özel anahtarınız bir parola ile korunuyorsa, SSH istemciniz bu parolayı isteyecektir.
Bu süreç, özel anahtarınızın asla ağ üzerinden aktarılmadığı, yalnızca şifreleme ve şifre çözme işlemlerinde kullanıldığı anlamına gelir, bu da güvenliği artırır.
Ön Koşullar
Bu makaledeki adımları takip etmek için aşağıdaki ön koşulların karşılandığından emin olun:
* OpenSSH Kurulumu:
* macOS: OpenSSH genellikle işletim sistemiyle birlikte gelir. Terminal uygulamasını açarak ssh -V komutuyla kurulu olup olmadığını kontrol edebilirsiniz.
* Linux: Çoğu Linux dağıtımında (Ubuntu, Debian, Fedora, CentOS vb.) OpenSSH istemcisi varsayılan olarak yüklüdür. Eğer kurulu değilse, dağıtımınızın paket yöneticisi ile kurabilirsiniz (örn: sudo apt install openssh-client veya sudo yum install openssh-clients).
* Windows Subsystem for Linux (WSL): WSL ortamı, bir Linux dağıtımı olduğu için Linux adımları geçerlidir. WSL’i kurduktan sonra terminali açarak ssh -V komutunu kullanabilirsiniz.
* Temel Komut Satırı Bilgisi: Terminal veya komut istemcisini kullanma konusunda temel bilgiye sahip olmanız gerekmektedir.
SSH Anahtarları Oluşturma: ssh-keygen Komutu
SSH anahtarları oluşturmak için ssh-keygen komutu kullanılır. Bu komut, hem özel hem de genel anahtar çiftini oluşturur ve genellikle kullanıcının ana dizinindeki .ssh klasörüne kaydeder (~/.ssh/).
Genel Sözdizimi:
ssh-keygen [seçenekler]
Önemli Seçenekler:
* -t : Oluşturulacak anahtarın türünü belirtir.
* ed25519 (Önerilen): Yeni ve modern bir anahtar türüdür. Daha küçük anahtar boyutlarına rağmen RSA’dan daha güvenli ve hızlıdır.
* rsa: Geleneksel ve yaygın olarak kullanılan bir anahtar türüdür. Güvenli olması için en az 2048 bit, tercihen 4096 bit olmalıdır.
* ecdsa: RSA’ya bir alternatif, ancak bazı güvenlik tartışmaları nedeniyle ed25519 daha çok tercih edilir.
* -b : Anahtarın bit boyutunu belirtir (sadece RSA ve DSA için). rsa için genellikle 4096 önerilir. ed25519 için bu seçenek gerekli değildir, çünkü anahtar boyutu sabittir.
* -C ": Anahtar dosyasına eklenecek bir yorumdur. Genellikle e-posta adresinizi veya anahtarı tanımlayan bir metni buraya yazarsınız. Bu yorum, genel anahtar dosyasının sonunda görünür ve anahtarın kime ait olduğunu veya ne amaçla kullanıldığını anlamaya yardımcı olur.
* -f : Anahtar çiftinin kaydedileceği dosya yolunu belirtir. Varsayılan olarak ~/.ssh/id_rsa veya ~/.ssh/id_ed25519 gibi isimlerle kaydedilir. Birden fazla anahtar çiftiniz varsa, farklı isimler vermek iyi bir uygulamadır (örn: ~/.ssh/id_github).
* -P : Yeni bir parola belirler.
* -N : Eski bir parolayı yeni bir parolayla değiştirir.
### Adım Adım Anahtar Oluşturma
Şimdi en güvenli ve önerilen yöntem olan ED25519 anahtarını oluşturma adımlarına geçelim.
ED25519 Anahtarı Oluşturma
Terminalinizi açın ve aşağıdaki komutu çalıştırın:
ssh-keygen -t ed25519 -C "your_email@example.com"
* -t ed25519: ED25519 algoritmasını kullanarak bir anahtar oluşturacağımızı belirtir.
* -C "your_email@example.com": Anahtarınıza bir yorum ekler. Kendi e-posta adresinizle veya anahtarın amacını açıklayan bir metinle değiştirin.
Komutu çalıştırdıktan sonra, ssh-keygen size birkaç soru soracaktır:
1. Enter file in which to save the key (/home/youruser/.ssh/id_ed25519):
Bu, özel anahtar dosyasının kaydedileceği konumu sorar. Varsayılan konum ~/.ssh/id_ed25519 genellikle uygun ve güvenlidir. Eğer birden fazla anahtar oluşturuyorsanız veya belirli bir amaç için farklı bir isim vermek istiyorsanız, burada farklı bir yol belirtebilirsiniz (örn: ~/.ssh/id_github_ed25519). Varsayılanı kabul etmek için Enter tuşuna basın.
2. Enter passphrase (empty for no passphrase):
Bu, özel anahtarınızı koruyacak bir parola (passphrase) girmenizi ister. Bu adım çok önemlidir ve kesinlikle güçlü bir parola kullanmalısınız. Bir parola kullanmak, özel anahtarınızın çalınması durumunda bile yetkisiz erişimi engeller. Parolayı boş bırakmak, anahtarınızı korumasız bırakır ve önerilmez. Güçlü bir parola, uzun, karmaşık ve tahmin edilmesi zor olmalıdır (tıpkı bir ana parola gibi). Girdiğinizde terminalde görünmez, bu normaldir.
3. Enter same passphrase again:
Parolayı tekrar girerek onaylayın.
Başarılı bir şekilde anahtar oluşturulduğunda, terminalde şöyle bir çıktı göreceksiniz:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/youruser/.ssh/id_ed25519
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub
The key's randomart image is:
+--[ED25519 256]----+
| +o*. |
| o.o= . |
| . = + |
| . * = o |
| o = S . |
| o B . |
| . = . |
| . o |
| E |
+-------------------+
Bu çıktı, özel anahtarınızın (id_ed25519) ve genel anahtarınızın (id_ed25519.pub) başarıyla oluşturulduğunu gösterir.
RSA Anahtarı Oluşturma (Alternatif)
Eğer eski sistemlerle uyumluluk için RSA anahtarına ihtiyacınız varsa, aşağıdaki komutu kullanabilirsiniz:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
* -t rsa: RSA algoritmasını kullanır.
* -b 4096: Anahtar boyutunu 4096 bit olarak ayarlar. Bu, RSA için önerilen minimum güvenlik seviyesidir.
* Diğer adımlar (dosya yolu, parola) ED25519 ile aynıdır.
Anahtar Dosyalarını İnceleme
Oluşturduğunuz anahtarları görmek için ~/.ssh dizinine gidin ve dosyaları listeleyin:
ls -al ~/.ssh
Çıktı şöyle bir şey olacaktır:
drwx------ 3 youruser youruser 4096 Oct 26 10:00 .
drwxr-xr-x 112 youruser youruser 4096 Oct 26 09:55 ..
-rw------- 1 youruser youruser 2000 Oct 26 10:00 id_ed25519 <-- Özel anahtar (private key)
-rw-r--r-- 1 youruser youruser 450 Oct 26 10:00 id_ed25519.pub <-- Genel anahtar (public key)
-rw-r--r-- 1 youruser youruser 10000 Oct 26 09:58 known_hosts
Dosya İzinleri:
Özel anahtar dosyanızın (id_ed25519) izinlerinin 600 (-rw-------) olduğundan emin olun. Bu, yalnızca sizin okuyup yazabileceğiniz anlamına gelir. Eğer izinler farklıysa (örn: 644), SSH istemcisi güvenlik nedeniyle anahtarı kullanmayı reddedebilir. İzinleri düzeltmek için:
chmod 600 ~/.ssh/id_ed25519
Genel anahtar dosyanızın (id_ed25519.pub) izinleri genellikle 644 (-rw-r--r--) olabilir, bu da sorun teşkil etmez, çünkü bu dosya zaten paylaşılmak üzere tasarlanmıştır. Ancak bazı durumlarda 600 olarak ayarlanması da mümkündür.
SSH Anahtarlarını Sunucuya Kopyalama
Anahtar çiftini oluşturduktan sonra, genel anahtarınızı erişmek istediğiniz uzak sunucuya kopyalamanız gerekir. Bu, sunucunun sizi özel anahtarınızla doğrulayabilmesini sağlar.
ssh-copy-id Kullanarak
ssh-copy-id komutu, genel anahtarınızı bir sunucuya kopyalamanın en kolay ve önerilen yoludur. Bu komut, sunucuda ~/.ssh dizinini oluşturur (eğer yoksa), authorized_keys dosyasını düzenler ve doğru izinleri ayarlar.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
* -i ~/.ssh/id_ed25519.pub: Kopyalanacak genel anahtar dosyasının yolunu belirtir. Eğer varsayılan anahtar adını (id_rsa veya id_ed25519) kullandıysanız, -i seçeneğini belirtmenize gerek kalmaz.
* user@remote_host: Uzak sunucudaki kullanıcı adınız ve sunucunun IP adresi veya ana bilgisayar adıdır (örn: ubuntu@192.168.1.100 veya root@my-server.com).
Komutu çalıştırdığınızda, sunucuya ilk kez bağlanıyorsanız bir parmak izi onayı ve ardından uzak sunucudaki user hesabının parolasını isteyecektir (SSH anahtarınızın parolası değil!). Parolayı girdikten sonra, genel anahtarınız sunucuya kopyalanmış olacaktır.
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/youruser/.ssh/id_ed25519.pub"
The authenticity of host 'remote_host (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:....
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user@remote_host's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@remote_host'"
and check to make sure that only the key(s) you wanted were added.
Manuel Olarak Kopyalama
Eğer ssh-copy-id komutu sisteminizde yoksa veya manuel olarak yapmak isterseniz, aşağıdaki adımları izleyebilirsiniz:
1. Genel anahtarınızın içeriğini görüntüleyin:
cat ~/.ssh/id_ed25519.pub
Çıktıyı tamamen kopyalayın. Şuna benzer olacaktır:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC5dY... your_email@example.com
2. Uzak sunucuya parola ile bağlanın:
ssh user@remote_host
Sunucu parolanızı girin.
3. Sunucuda ~/.ssh dizinini oluşturun (eğer yoksa) ve izinlerini ayarlayın:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
4. Kopyaladığınız genel anahtarı authorized_keys dosyasına ekleyin:
echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
PASTE_YOUR_PUBLIC_KEY_HERE kısmını, 1. adımda kopyaladığınız genel anahtar içeriği ile değiştirin.
Dikkat: >> operatörü, anahtarı dosyanın sonuna ekler. Eğer > kullanırsanız, dosyanın içeriğini siler ve sadece sizin anahtarınızı bırakır. Birden fazla anahtarınız varsa >> kullanmak önemlidir.
5. authorized_keys dosyasının izinlerini ayarlayın:
chmod 600 ~/.ssh/authorized_keys
Bu adımları tamamladıktan sonra, sunucudan çıkış yapın (exit) ve anahtarınızla bağlanmayı deneyin.
SSH Anahtarlarıyla Bağlanma
Genel anahtarınızı sunucuya kopyaladıktan sonra, artık parola girmeden bağlanabilirsiniz (eğer özel anahtarınızın parolası yoksa veya ssh-agent kullanıyorsanız).
ssh user@remote_host
Eğer özel anahtarınız bir parola ile korunuyorsa, bu noktada sizden parolanızı isteyecektir. Doğru parolayı girdiğinizde sunucuya bağlanacaksınız.
İlk kez bir sunucuya bağlandığınızda, SSH istemcisi sunucunun ana bilgisayar anahtarının parmak izini sorar. Bu, "Ortadaki Adam" saldırılarını önlemek içindir. Eğer parmak izi doğruysa yes yazıp Enter tuşuna basın. Bu parmak izi, ~/.ssh/known_hosts dosyanıza kaydedilecektir.
ssh-agent ve ssh-add Kullanarak Passphrase Yönetimi
Her SSH bağlantısı kurduğunuzda özel anahtarınızın parolasını girmek can sıkıcı olabilir. ssh-agent ve ssh-add komutları, bu sorunu çözmek için kullanılır.
* ssh-agent: Arka planda çalışan bir programdır. Özel anahtarlarınızın şifresini çözülmüş hallerini bellekte güvenli bir şekilde saklar. Böylece anahtarınızı bir kez parolayla açtıktan sonra, oturumunuz boyunca tekrar parola girmenize gerek kalmaz.
* ssh-add: Özel anahtarınızı ssh-agent'a eklemek için kullanılır.
Kullanım Adımları:
1. ssh-agent'ı başlatın:
eval "$(ssh-agent -s)"
Bu komut, ssh-agent'ı başlatır ve gerekli ortam değişkenlerini ayarlar. Çıktı şöyle bir şey olabilir:
Agent pid 12345
2. Özel anahtarınızı ssh-agent'a ekleyin:
ssh-add ~/.ssh/id_ed25519
Eğer anahtarınız bir parola ile korunuyorsa, bu noktada parolanızı isteyecektir. Parolayı girdikten sonra anahtarınız ssh-agent'a eklenir.
Birden fazla anahtarınız varsa, her birini ssh-add ile ekleyebilirsiniz.
Tüm anahtarları otomatik olarak eklemek için: ssh-add (bu, varsayılan konumdaki tüm anahtarları eklemeye çalışır).
3. Eklenen anahtarları listeleyin:
ssh-add -l
Bu komut, ssh-agent'a eklenmiş tüm anahtarların parmak izlerini listeler.
Artık, terminal oturumunuz boyunca (veya ssh-agent çalıştığı sürece), özel anahtarınızın parolasını tekrar girmeden SSH bağlantıları kurabilirsiniz.
ssh-agent'ı Otomatik Başlatma:
ssh-agent'ı her terminal oturumunda manuel olarak başlatmak yerine, kabuk yapılandırma dosyanıza (örn: ~/.bashrc, ~/.zshrc) ekleyerek otomatik olarak başlatılmasını sağlayabilirsiniz.
Aşağıdaki kod bloğunu dosyanızın sonuna ekleyin:
# Start ssh-agent if not already running
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)"
fi
Add SSH keys to agent if not already added
You might want to be more specific here, e.g., ssh-add ~/.ssh/id_ed25519
ssh-add -l &>/dev/null || ssh-add
Bu kod, ssh-agent'ın zaten çalışıp çalışmadığını kontrol eder ve çalışmıyorsa başlatır. Ardından, zaten eklenmemiş anahtarları ssh-agent'a eklemeye çalışır. Değişikliklerin etkili olması için terminalinizi yeniden başlatmanız veya source ~/.bashrc (veya ~/.zshrc) komutunu çalıştırmanız gerekebilir.
SSH Yapılandırma Dosyası (~/.ssh/config)
~/.ssh/config dosyası, SSH bağlantılarınızı özelleştirmek ve basitleştirmek için güçlü bir araçtır. Bu dosya sayesinde sunuculara takma adlar atayabilir, varsayılan kullanıcı adlarını, özel anahtar dosyalarını, port numaralarını ve diğer birçok seçeneği belirleyebilirsiniz.
Bir metin düzenleyiciyle ~/.ssh/config dosyasını açın (eğer yoksa oluşturun):
nano ~/.ssh/config
Örnek bir yapılandırma:
Host myserver
Hostname 192.168.1.100
User myuser
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ForwardAgent yes
Host github.com
Hostname github.com
User git
IdentityFile ~/.ssh/id_github_ed25519
IdentitiesOnly yes
ForwardAgent yes
Host *
# Tüm hostlar için varsayılan ayarlar
# Sunucuya ilk bağlantıda parmak izini kaydet
StrictHostKeyChecking ask
# Varsayılan olarak 5 dakika sonra bağlantıyı canlı tut
ServerAliveInterval 300
Açıklamalar:
* Host myserver: Bu, sunucuya bağlanırken kullanacağınız takma addır. Artık ssh 192.168.1.100 -p 2222 -l myuser -i ~/.ssh/id_ed25519 yerine sadece ssh myserver yazmanız yeterli olacaktır.
* Hostname 192.168.1.100: Uzak sunucunun gerçek IP adresi veya alan adı.
* User myuser: Uzak sunucuya bağlanmak için kullanılacak kullanıcı adı.
* Port 2222: Uzak sunucunun SSH servisi için kullandığı port numarası (varsayılan 22'den farklıysa).
* IdentityFile ~/.ssh/id_ed25519: Bu host için kullanılacak özel anahtar dosyasının yolu.
* IdentitiesOnly yes: SSH istemcisinin bu host için yalnızca IdentityFile ile belirtilen anahtarı kullanmaya çalışmasını sağlar. Bu, gereksiz anahtar denemelerini önler ve bağlantı süresini hızlandırır.
* ForwardAgent yes: ssh-agent'ı uzak sunucuya iletir. Bu, uzak sunucudan başka bir sunucuya bağlanmanız gerektiğinde (örn: Git depoları için) anahtarınızı tekrar girmeden bağlantı kurmanızı sağlar.
Host : Tüm hostlar için geçerli olacak varsayılan ayarları tanımlar.
* StrictHostKeyChecking ask: İlk bağlantıda sunucu parmak izini sorar ve known_hosts'a kaydeder.
* ServerAliveInterval 300: Bağlantının aktif kalması için her 300 saniyede bir boş paket gönderir.
~/.ssh/config dosyasını kaydettikten sonra, artık takma adları kullanarak kolayca bağlanabilirsiniz:
ssh myserver
ssh github.com
Anahtar Güvenliği ve En İyi Uygulamalar
SSH anahtarlarının güvenliği, parola tabanlı kimlik doğrulamadan daha iyi olsa da, doğru şekilde yönetilmediğinde riskler taşıyabilir. İşte dikkat etmeniz gereken en iyi uygulamalar:
* Özel anahtarınızı asla paylaşmayın: Özel anahtarınız, dijital kimliğiniz gibidir. Kimseyle paylaşmayın ve güvenli bir yerde saklayın.
* Her zaman güçlü bir parola (passphrase) kullanın: Özel anahtarınızı bir parola ile korumak, çalınması durumunda bile yetkisiz erişimi engeller. Bu parola, uzun ve karmaşık olmalıdır.
* Anahtar dosyalarının izinlerini kontrol edin: Özel anahtarınızın izinleri 600 (-rw-------) olmalı, yani sadece siz okuyabilir ve yazabilirsiniz. ~/.ssh dizininin izinleri 700 (drwx------) olmalıdır.
* Kullanılmayan anahtarları silin: Artık kullanmadığınız veya süresi dolmuş anahtarları hem yerel sisteminizden (~/.ssh/) hem de uzak sunuculardaki authorized_keys dosyalarından silin.
* Anahtarları düzenli olarak değiştirin (rotasyon): Özellikle yüksek güvenlik gerektiren ortamlarda, anahtarlarınızı belirli aralıklarla (örn: yılda bir) yenilemek iyi bir uygulamadır.
* ssh-agent'ı akıllıca kullanın: ssh-agent, kolaylık sağlarken, agent'ın çalıştığı makinenin güvenli olduğundan emin olun. Agent'ın iletilmesini (ForwardAgent) yalnızca güvendiğiniz sunuculara yapın.
* Donanım anahtarlarıyla çok faktörlü kimlik doğrulama (MFA): YubiKey gibi FIDO/U2F uyumlu donanım anahtarlarıyla SSH anahtarlarınızı daha da güçlendirebilirsiniz. ssh-keygen -t ed25519-sk veya ssh-keygen -t ecdsa-sk komutları bu tür anahtarları oluşturmanıza olanak tanır.
* Genel anahtarlarınızı sadece ihtiyaç duyulan sunuculara ekleyin: Her sunucuya aynı genel anahtarı eklemek yerine, yalnızca ilgili sunucuya erişmesi gereken anahtarı ekleyin.
SSH Anahtarı Yönetimi ve Sorun Giderme
SSH anahtarlarıyla çalışırken karşılaşabileceğiniz bazı yaygın durumlar ve sorun giderme ipuçları:
Mevcut Anahtarları Listeleme
ssh-agent'a yüklenmiş anahtarları listelemek için:
ssh-add -l
Bu, anahtarlarınızın parmak izlerini ve yorumlarını gösterir.
Anahtar Parmak İzini Alma
Bir genel anahtar dosyasının parmak izini almak için:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
Bu, known_hosts dosyasındaki parmak izleriyle karşılaştırmak için faydalı olabilir.
Passphrase Değiştirme
Mevcut bir özel anahtarın parolasını değiştirmek için:
ssh-keygen -p -f ~/.ssh/id_ed25519
Önce mevcut parolanızı, ardından yeni parolanızı girmeniz istenecektir.
Passphrase'i Kaldırma (Önerilmez)
Özel anahtarınızdan parolayı kaldırmak için aynı komutu kullanabilir, ancak yeni parola istendiğinde boş bırakabilirsiniz. Bu güvenlik açısından önerilmez.
ssh-keygen -p -f ~/.ssh/id_ed25519
Mevcut parolayı girin, yeni parola istendiğinde iki kez Enter tuşuna basın.
Sık Karşılaşılan Sorunlar
* Permissions 0644 for 'private_key' are too open.
Bu hata, özel anahtar dosyanızın izinlerinin çok açık olduğunu gösterir. SSH istemcisi, anahtarınızın güvenliğinden emin olamadığı için onu kullanmayı reddeder.
Çözüm: chmod 600 ~/.ssh/id_ed25519 komutunu kullanarak izinleri düzeltin.
* Agent admitted failure to sign using the key.
Bu genellikle ssh-agent'a anahtarın doğru şekilde eklenmediği veya anahtarın parolasının yanlış girildiği anlamına gelir.
Çözüm: ssh-add -D ile tüm anahtarları agent'tan kaldırın ve ssh-add ~/.ssh/id_ed25519 ile anahtarınızı tekrar ekleyin, parolasını doğru girdiğinizden emin olun.
* No such file or directory
Belirtilen anahtar dosyasının veya yapılandırma dosyasının bulunamadığı anlamına gelir.
Çözüm: Dosya yolunu doğru yazdığınızdan ve dosyanın gerçekten o konumda olduğundan emin olun.
* Connection refused
Uzak sunucunun SSH bağlantısını reddettiği anlamına gelir. Bu genellikle sunucu tarafında bir sorun (SSH servisi çalışmıyor, güvenlik duvarı bağlantıyı engelliyor, yanlış port) veya ağ sorunlarından kaynaklanır.
Çözüm: Sunucunun çalışır durumda olduğundan, SSH servisi (sshd) etkin olduğundan ve güvenlik duvarının SSH portuna (varsayılan 22) izin verdiğinden emin olun.
* Authentication failed
SSH anahtarıyla kimlik doğrulamanın başarısız olduğu anlamına gelir.
Çözüm:
* Doğru özel anahtarı kullandığınızdan emin olun (~/.ssh/config dosyasını kontrol edin veya -i seçeneğiyle belirtin).
* Genel anahtarınızın uzak sunucudaki ~/.ssh/authorized_keys dosyasına doğru bir şekilde kopyalandığından ve dosya izinlerinin (600) doğru olduğundan emin olun.
* Uzak sunucuda doğru kullanıcı adıyla bağlanmaya çalıştığınızdan emin olun (ssh user@remote_host).
* Sunucunun SSH yapılandırmasında parola tabanlı kimlik doğrulama devre dışı bırakılmış ancak anahtar tabanlı kimlik doğrulama doğru ayarlanmamış olabilir. Sunucu tarafındaki /etc/ssh/sshd_config dosyasını kontrol edin (PubkeyAuthentication yes ve AuthorizedKeysFile .ssh/authorized_keys ayarları).
* ssh -v user@remote_host: Bağlantı sorunlarını gidermek için ssh komutuna -v (verbose) seçeneğini ekleyerek daha ayrıntılı hata ayıklama çıktıları alabilirsiniz. Bu çıktılar, bağlantı sürecinin hangi aşamasında bir sorun olduğunu anlamanıza yardımcı olabilir.
Sonuç
SSH anahtarları, modern yazılım geliştirme, sistem yönetimi ve bulut bilişim ortamlarında güvenli ve verimli erişim sağlamanın vazgeçilmez bir parçasıdır. Bu makalede ele aldığımız adımları takip ederek, macOS, Linux veya WSL ortamlarınızda OpenSSH ile güçlü anahtar çiftleri oluşturabilir, bunları uzak sunucularınıza güvenli bir şekilde dağıtabilir ve ssh-agent ile ~/.ssh/config gibi araçlarla yönetimini kolaylaştırabilirsiniz.
Unutmayın ki güvenlik, yalnızca doğru araçları kullanmakla kalmaz, aynı zamanda bu araçları en iyi uygulamalara uygun şekilde yapılandırmak ve yönetmekle de ilgilidir. Özel anahtarlarınızı her zaman koruyun, güçlü parolalar kullanın ve anahtarlarınızı düzenli olarak gözden geçirin. Bu sayede, dijital altyapınızın güvenliğini önemli ölçüde artırabilir ve iş akışlarınızı daha verimli hale getirebilirsiniz. SSH anahtarlarının sunduğu kolaylık ve güvenliği bir kez deneyimledikten sonra, parola tabanlı kimlik doğrulamaya geri dönmek istemeyeceksiniz.