Belge

Linux’ta ” Permission Denied (publickey)” SSH Hatasını Nasıl Düzeltebilirsiniz?

SSH, uzaktaki makinelere bağlanmak için kullanışlı bir araçtır, ancak Linux’ta genel anahtarınızla ilgili “İzin reddedildi (publickey)” hatasıyla karşılaşabilirsiniz. Neyse ki, sorunu gidermek için deneyebileceğiniz bazı kolay düzeltmeler var.

Genel Anahtar Nedir?

Linux’ta SSH için bir anahtar çifti oluşturduğunuzda size bir genel anahtar ve bir özel anahtar verilecektir. Özel anahtar, yakından korunan bir sır olarak yanınızda kalacaktır, ancak genel anahtar, parola olmadan oturum açmanıza izin vermek için uzak sunuculara iletilecek olandır. Yerel SSH istemciniz, bağlandığınızda genel anahtarı özel anahtarla eşleştirecektir.

Bu yöntemin avantajı yalnızca genel anahtarı vermenizin gerekmesidir. Özel anahtarınızı gizli tuttuğunuz sürece, genel anahtarınızın ele geçirilmesi durumunda bu sizi güvende tutacaktır. Genel anahtar tek başına işe yaramaz.

Açık kaynak dünyasında en yaygın kullanılan SSH istemcisi ve sunucusu olan OpenSSH, uzak makinedeki genel anahtarları içeren dosyanın belirli izinlere sahip olmasını gerektirir (ana dizininizdeki “.ssh/authorized_keys”). “world-writable” olarak bilinen yazma izinleri diğer kullanıcılar için ayarlanmışsa çalışmaz. Dizin adı nokta (.) ile başladığından, ls -A komutunu kullanmadığınız sürece hiçbir ls listesinde görünmez.

Dosya başka bir bilgisayardan kopyalandıysa veya kendiniz oluşturduysanız izinler değişebilir. Neyse ki bunu düzeltmek kolaydır.

Genel Anahtar İzinlerinizi Kontrol Edin

Yetkili_anahtarlar dosyası, uzak makinedeki hesabınızda oturum açabilmek istediğiniz istemcilerin tüm genel anahtarlarını içeren düz metinli bir dosyadır. İzinlerini görmek için ls komutunu -l seçeneğiyle birlikte kullanın:

ls -l ~/.ssh/authorized_keys

Bu, sahip, grup ve diğer kullanıcılar için izin ayarlarını gösterecektir. Dizedeki son altı harfe dikkat edin. Bunlarda “w” harfini görüyorsanız bu, grubun veya başkalarının ona yazabileceği ve bu durumun onu güvensiz hale getirebileceği anlamına gelir.

Bu dosyanın sizin tarafınızdan yazılabilir olmasını isteyeceksiniz, ancak grup veya başkaları tarafından yazılmasını istemeyeceksiniz. Doğru kullanıcılara erişim vermek için izinleri chmod ile değiştirebilirsiniz.

İki yolu vardır: sayısal ve sembolik olarak.

Sayısal yol daha kısadır ancak sekizlik izin sayılarını ezberlemeniz gerekir:
chmod 700 ~/.ssh/authorized_keys

Sembolik yöntem daha anımsatıcıdır:
chmod go-w ~/.ssh/authorized_keys

Anahtarları ssh-agent Kullanarak Güvenle Kopyalayın

Makinenizdeki genel anahtarları manuel olarak kopyalayıp ~/.ssh/.authorized_keys dosyasına yapıştırabilirsiniz, ancak ssh-agent programını kullanmak herhangi bir izin hatası olasılığını azaltacaktır.

Ssh-agent’ı başlatmak için şu komutu kullanın:
eval "$(ssh-agent-s)"

Uzak bir sunucuda ssh-agent kullanarak oturum açmak için ssh ile -A seçeneğini kullanın
ssh -A [email protected]

Uzak Sunucunun sshd Ayarlarını kontrol edin

Bu çabalardan herhangi biri başarısız olursa, root erişiminiz varsa uzak makinedeki sshd sunucusunda bazı yapılandırma değişiklikleri yapmanız gerekebilir. Değilse, SSH bağlantı sorunlarını çözmenize yardımcı olması için büyük olasılıkla sistem yöneticinizle iletişime geçmeniz gerekecektir. Bu son çare yöntemidir çünkü sisteminizi daha az güvenli hale getirebilir.

Sshd için sistem çapındaki yapılandırma dosyası /etc/ssh/sshd_config’tir. Sahibi root olduğundan, düzenlemek için sudo kullanmanız gerekecek. Örneğin, Vim ile düzenlemek için
sudo vim /etc/ssh/sshd_config

Authorized_keys dosyanız herkes tarafından yazılabilir olsa bile sshd’nin oturum açmanıza izin vermesini sağlamak için bu dosyada “StrictModes” seçeneğini “no” olarak ayarlayın.

Kaydedin ve SSH sunucusunu yeniden başlatın:
sudo systemctl restart sshd.service

Artık SSH Genel Anahtar İzinleri Hatalarını Düzeltebilirsiniz

Uzak sistemlerde SSH ortak anahtarlarıyla ilgili hatalarla karşılaşabilirsiniz. Neyse ki, çoğu zaman tek yapmanız gereken, dosya izinlerini kontrol edip, anahtarınızı başka kimsenin göremeyeceği şekilde ayarlamaktır. Daha güvenilir bağlantılar için ssh-agent’ı da kullanabilirsiniz. Son çare olarak SSH sunucusunu daha az katı hale getirebilirsiniz.

Yazının orijinalini buradan okuyabilirsiniz.