DigitalOcean “Permission denied (publickey)” Hatasının Çözümü


DigitalOcean üzerinden satın aldığım Droplet üzerine gelecex.com (şuan sayfalarında gezindiğiniz) blog sitesini kurmak istedim. Bunun için önce dropleti oluşturdum ve ardından ilk yapmak istediğim şey SSH bağlantısı sağlayabilmekti. Fakat SSH bağlantısı yapmak istediğimde “Permission denied (publickey)” hatası aldım. Şimdi en baştan alarak dropleti oluşturduktan sonra neler yaptığı, nelerle karşılaştığımı anlatacağım.

Komut Satırında SSH Key Oluşturmak

SSH bağlantısı yapmak için öncelikle bağlantı yapacağınız sunucu ile bilgisayarınız arasında güvenli bir kanal oluşturmanız gerekmektedir. Bunun için komut satırına;

ssh-genkey

yazıp, çalıştırabilirsiniz. Komutu çalıştırdığınız zaman size aşağıdaki gibi bir çıktı verecektir.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/obetron/.ssh/id_rsa):

Burada sizden public ve private yani açık ve gizli anahtar çiftine oluştururken dosyalara vereceği ismi girmenizi söylüyor. Örneğin id_rsa girebilirisiniz veya size ssh key değerini neresi için ürettiğinizi hatırlatacak bir isim daha iyi olabilir. digitalocean, gitlab vs.

Enter passphrase (empty for no passphrase):

Public ve private key değerlerine ait ismi girdikten sonra sizden bu anahtar çiftine ait bir parola oluşturmanızı istiyor, eğer parola vermek istemiyorsanız doğrudan Enter tuşuna basarak geçebilirsiniz.

Enter same passphrase again:

Parolayı girdikten sonra teyit amaçlı parolayı tekrar girmenizi istiyor, önceki girdiğinizle aynı girdiğiniz takdirde bir problem olmadan bu adım sonlanıyor ve aşağıdaki gibi bir çıktı alıyorsunuz.

Your identification has been saved in obetron.
Your public key has been saved in obetron.pub.
The key fingerprint is:
SHA256:aFgCLc7fL1ArDwQB87Stz9BBQR6hoLljDeTZMZ55VEY 
obetron@Apple-MacBook-Pro.local
The key's randomart image is:
+---[RSA 2048]----+
|+o+**+oE         |
|+**BB..          |
|o*+B=..          |
| .=oo=..         |
|o.o+ooo.S        |
|.. +=.o          |
|    o= .         |
|      o .        |
|       .         |
+----[SHA256]-----+

Şimdi komut satırında, dizindeki dosyaları listelemek için “ls -l” komutunu çalıştırırsanız, aşağıdaki gibi .pub uzantılı public key ve uzantısız private key dosyalarını görebilirsiniz.

-rw-------  1 obetron  staff  1896 Feb  1 13:04 obetron
-rw-r--r--  1 obetron  staff   417 Feb  1 13:04 obetron.pub

DigitalOcean’a Public Key Ekleme

Public key değerini text olarak görüntüleyebilmeniz mümkün olduğu için kullandığınız bir text editör varsa onunla .pub uzantılı dosyanızı açarak içeriğini kopyalayabilirsiniz. Eğer text editör yok veya doğrudan komut satırından kopyalamak istiyorsanız aşağıdaki komutu çalıştırarak .pub uzantılı dosyanın içeriğini ekrana yazdırarak doğrudan kopyalayabilirsiniz.

cat ~/.ssh/obetron.pub

Elbette burada siz kendi public key adınızı yazarak işlem yapmalısınız. Kendi public key dosyanızın adıyla komutu çalıştırdığınızda aşağıdaki gibi bir verinin ekrana yazdırılması gerekmektedir.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFQjE63daTs0xXQscVQgm
Uhwc9ZqErdlsKM+Txg+FgNwQY+UkUK7NompO6lARSeucB/ghcOx
wRSU/ZXKYCQSEOuitHuNQyiXKkhOJJOYbaEWoiq5OltK87bp4uK
4V2U/rZOkVdX4Lb7ihEd6DHt02nf13ZwiqupxKOQb1Y53yKoCXy
OF2AgG7Sc7B4i31iY/spBcpcJWMnXwaXuNItjMH4lJtxJ8RJ7C18fEFjtgCG4MeZi
7X2C7HoAaABPUnp0r
jlcP74sDr1HjWPDugYAbqkmzkuQI9a/F/WPHQxTVy2blOnVTULx+9Q5c7t2NE
/3g8pKcJ1xfbH7EDPQHzYeztZ obetron@Apple-MacBook-Pro.local

Bu değeri seçerek kopyalıyorsunuz, sonrasında DigitalOcean web sitesine giriş yaparak sol tarafta çıkan menüden Security menüsünü seçiyorsunuz.

Açılan ekranda aşağıdaki görselde görüldüğü gibi Add SSH Key butonuna tıklıyorsunuz.

Açılan ekranda önceden kopyalamış olduğunuz public key değerini SSH Key Content alanı içerisine yapıştırıyorsunuz ve SSH Key değerini tanımlayacak Home, Work, macbook vb. gibi bir isim vererek Add SSH Key butonuna tıklıyorsunuz.

Bu işlem tamamlandıktan sonra normal şartlarda işlemler tamamlanmış ve SSH bağlantısını yapabiliyor olmanız gerekmektedir. Bunu denemek için aşağıdaki komutu çalıştırıyorsunuz.

ssh username@server_ip_address

Bu komutta username alanı ilk bağlantıda muhtemelen “root” olarak belirlenmiş olacaktır. server_ip_address değeri de DigitalOcean tarafından size verilen sunucu ip adresidir. Bu komutu çalıştırdıktan sonra bağlantı sağlayabiliyorsanız yazının devamını okumanıza gerek yok. Şanslısını çünkü normal süreci olması gerektiği gibi tamamladığınız anlaşılıyor. Fakat benim gibi aşağıdaki hatayı aldıysanız okumaya devam edin.

Permission denied (publickey)

Permission denied (publickey) Çözümü

İlk olarak en basit akla ilk gelen yolu denemekte fayda var, o da komut satırından ssh key değerini sunucuya göndermeye çalışmaktır. Bunu yapabilmek için aşağıdaki komutu çalıştırın,

ssh-copy-id username@server_ip_address

Fakat siz de benim gibi hatayı ilk bağlantı esnasından alıyorsanız bu komutu çalıştırdığınızda da muhtemelen Permission denied (publickey) hatası alacaksınız.

Hatanın detayına dair araştırma yaptıysanız farklı web sitelerinde muhtemelen /etc/ssh/sshd_config dosyasında aşağıdaki değişiklikleri yaptıktan sonra tekrar denemenizi isteyen çözümler görmüşsünüzdür;

sudo nano /etc/ssh/sshd_config
PermitRootLogin prohibit-password to PermitRootLogin yes 
PasswordAuthentication no to PasswordAuthentication yes

Bu çözüm benim için çalışmadı, ilgili değişiklikleri yaptıktan sonra yine aynı hatayı almaya devam ettim.

DigitalOcean arayüzünden size sağlanan sunucunun komut satırına ulaşabiliyorsunuz. Son çare bu özellik aracılığı ile sunucuma login oldum.

DigitalOcean web sayfasına kullanıcı adı ve parolayla giriş yaptıktan sonra soldaki menüden görselde görüldüğü gibi Access butonuna tıkladım.

Açılan ekranda Launch Console butonuna tıklayarak terminal sayfasına eriştim. Burada root şifresini ilk sefere mahsus DigitalOcean mail olarak gönderiyor ve giriş yaptığınızda değiştirmenizi istiyor. Giriş yaptıktan sonra aşağıdaki komut ile authorized_keys dosyasını açtım;

vi ~/.ssh/authorized_keys

Dosya içerisinde benim public key değerimden farklı bir public key değeri vardı. Bilgisayarımda ürettiği public key değerini kopyalayarak doğrudan DigitalOcean console’dan authorized_keys dosyası içerisine yapıştırdım. Tekrar kendi bilgisayarımda açık olan terminal üzerinden SSH bağlantısı yapmaya çalıştığımda başarılı bir şekilde bağlantı sağladım.

Eğer bu konuyla ilgili çözüm işinize yaramadıysa veya farklı bir şekilde çözüm ürettiyseniz yorumlara yazarsanız konuyu zenginleştirmiş olursunuz.


 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir