Bloga dön

SSH Permission denied (publickey): gerçek çözüm

18 Eylül 2026

Saat 02:10’da bir deploy, bin kez yazdığım bir satırda öldü: ssh deploy@stagingPermission denied (publickey). Anahtar sağlamdı. Sorun teklifteydi.

TL;DR: Permission denied (publickey), istemcinin sunduğu her anahtarın sunucu tarafından reddedildiği anlamına gelir — bu bir pazarlık kararıdır, parola yazım hatası değil. Teşhis için ssh -vvv (hangi anahtarlar sunuldu) ve sunucu günlüğü journalctl -u ssh (hangileri reddedildi, neden) kullanın. Sonra dört nedenin birini düzeltin: yanlış kullanıcı, anahtarın authorized_keys içinde olmaması, çok açık izinler ya da OpenSSH 8.8+‘ın reddettiği ssh-rsa bir anahtar. ssh-copy-id tekrarların çoğunu önler.

$ ssh -T [email protected]
[email protected]: Permission denied (publickey).

Hata bir ipucu değil, hükümdür: teklifteki her şey reddedildi.

SSH neden “Permission denied (publickey)” diyor?

Herkese açık anahtarlı kimlik doğrulama, teklif–red pazarlığıdır. İstemci bulabildiği her anahtarı önerir — ajanınızdaki kimlikler, ~/.ssh/config, varsayılan dosya adları (id_ed25519, id_rsa) ve -i ile verdiğiniz her şey. Sunucu her teklifi hedef hesabın ~/.ssh/authorized_keys ile karşılaştırır. Hiçbiri eşleşmezse ve parolayla giriş devre dışı ya da tükenmişse, istemci her devops mühendisinin ezberinde olan o satırı basar.

Hata ayıklamak için iki gerçek önemli. Birincisi: ileti hangi kullanıcıya vurduğunuzu söylemez — yarım vakada kusursuz sağlam bir anahtar yanlış hesabın authorized_keys dosyasında oturur. İkincisi: sunucu nedeni çoktan söyledi; sshd her reddedilen teklifi günlüğe yazar. Kimsenin istemediği, herkesin ihtiyaç duyduğu yığın izi ise -vvv‘dir.

SSH gerçekten hangi anahtarı sunuyor, nasıl görürüm?

ssh -vvv deploy@staging 2>&1 | grep -iE "offering|identity|denied|authentications"
# debug1: Offering public key: /home/you/.ssh/id_ed25519 RSA-SHA256 (explicit)
# debug1: Authentications that can continue: publickey
# deploy@staging: Permission denied (publickey).

Üç satır okuyun: Offering public key (istemcinin önerdiği), Authentications that can continue (sunucunun hâlâ kabul ettiği — password yoksa parola sorusu asla gelmez) ve son hüküm. Doğru anahtarınız teklif listesinde hiç görünmüyorsa sorun istemci taraflıdır: yanlış -i yolu, ~/.ssh/config içinde unutulmuş bir IdentityFile ya da önce yanıt veren bayat bir kimliğe sahip bir ajan (ssh-add -l).

Dört gerçek neden hangileri?

NedenBelirtiÇözüm
Yanlış kullanıcıAnahtar root@host için çalışır, deploy@host için başarısız olurAnahtar, o kullanıcının ~/.ssh/authorized_keys dosyasında olmalı
Anahtar kurulmamışSunucu günlüğü her teklif için Failed publickey gösterirssh-copy-id user@host
İzinler çok açıkİstemci: WARNING: UNPROTECTED PRIVATE KEY FILE — anahtar atlanır, hiç sunulmazchmod 700 ~/.ssh; chmod 600 ~/.ssh/*
Eski ssh-rsa anahtarıSunucu OpenSSH 8.8+; eski RSA anahtarı asla kabul edilmezed25519 olarak yeniden üretin ya da anahtarı yükseltin

İzin nedeni kendi notunu hak eder, çünkü OpenSSH bunu katı uygular: grup ya da diğerleri tarafından okunabilen bir özel anahtar, istemcinin kendisi tarafından reddedilir ve tekliften sessizce düşer. Çözüm iki komut:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys

ssh-rsa nedeni eski CI imajlarını ve Raspberry Pi’leri yakalar: OpenSSH 8.8 (2021-10-01 tarihli, openssh.com/txt/release-8.8) ssh-rsa imzalarını — SHA-1 tabanlı türü — varsayılan olarak devre dışı bıraktı. Sürüm notlarından: “the ssh-rsa signature scheme is … disabled by default”. 2018’de üretilmiş bir RSA anahtarı bozuk değil; sadece imza biçimi artık konuşulmuyor. Kalıcı çözüm bir ed25519 anahtarı üretmek (ssh-keygen -t ed25519) ve bulut konsolları, tamirin ortasında kendinizi kilitlediğinizde size seri konsol verir.

Config’ini düzenlerken sshd başlamayı reddediyorsa, o başka bir av — bakınız systemd service not starting.

Sunucu anahtarı neden reddetti, nasıl görürüm?

Sunucu tarafındaki günlük dürüst tanıktır. Ubuntu’da (systemd) sshd her teklifin hükmünü günlüğe yazar:

journalctl -u ssh -n 50 --no-pager | grep -iE "publickey|denied|accepted"
# sshd[4421]: Failed publickey for deploy from 203.0.113.7 port 51422 ssh2: RSA SHA256:...
# sshd[4421]: Accepted publickey for deploy from 203.0.113.7 port 51422 ssh2: ED25519 SHA256:...

Beklenmedik bir parmak iziyle gelen Failed publickey, istemcinin sandığınızdan başka bir anahtar sunduğu anlamına gelir — geri dönün -vvv‘ye. Sizin parmak izinizle gelen Failed publickey, anahtarın doğru olduğu ama o hesap için kurulmadığı ya da sunucu tarafında ev dizini izinlerinin yanlış olduğu anlamına gelir (aynı 700/600 kuralı sunucunun ~/.ssh ve ~/.ssh/authorized_keys için de geçerlidir).

Anahtarımı doğru şekilde nasıl kurarım?

ssh-copy-id deploy@staging
# Number of key(s) added: 1
ssh -o BatchMode=yes deploy@staging 'echo ok'   # etkileşimsiz kanıt

ssh-copy-id, herkese açık anahtarınızı hedef hesabın authorized_keys dosyasına sağlıklı izinlerle ekler — bu komut var, çünkü authorized_keys‘e elle yapıştırmak tam yeterince sık başarısız olur: sonda kalan bir satır sonu ya da olmayan bir dizin. Gerçek test BatchMode denetimidir: tüm soruları kapatır; başarı, girişi yalnızca anahtarın taşıdığı anlamına gelir. Anahtar çalıştığında scp ve rsync aynı kimlik doğrulamayı bedavaya devralır — aralarındaki seçim bant genişliği meselesidir, kimlik bilgisi değil (rsync vs scp).

30 saniyelik triyaj

ssh -vvv user@host 2>&1 | grep -i offering      # 1. hangi anahtarlar sunuldu?
journalctl -u ssh -n 50 | grep -i publickey     # 2. neden reddedildi?
ls -ld ~/.ssh ~/.ssh/authorized_keys            # 3. 700 / 600 mü?
ssh-copy-id user@host                           # 4. kur, BatchMode ile doğrula

Permission denied (publickey) bir parola istemi değil, bir pazarlık sonucudur — sunucu teklifteki her anahtarı reddetti ve günlüğü nedenini çoktan biliyor.

Dört komutu sırayla çalıştırın ve arıza gizem olmaktan çıkar: her seferinde biri suçluyu adlandırır. Benimki, doğru anahtardan önce yanıt veren bayat bir ajan kimliğiydi — ssh-add -d ve deploy saat 02:31’de yeniden yeşile döndü.

FAQ

SSH neden Permission denied (publickey) diyor?

İstemcinin sunduğu her anahtarın sunucu tarafından reddedildiği ve parola ya da keyboard-interactive kimlik doğrulamasının denenmediği ya da izin verilmediği anlamına gelir. Bu bir parola yazım hatası değil — sunulan anahtarlar üzerinden verilmiş bir pazarlık kararıdır.

Ubuntu'da SSH permission denied (publickey) nasıl düzeltilir?

Sunucu tarafını journalctl -u ssh -n 50 ile kontrol edin, herkese açık anahtarınızın hedef kullanıcının ~/.ssh/authorized_keys dosyasında olduğunu doğrulayın ve izinlerin ~/.ssh için 700, authorized_keys ve özel anahtar için 600 olduğundan emin olun.

ssh -i anahtarım neden hâlâ başarısız oluyor?

Üç olası neden: özel anahtarın izinleri çok açık olduğu için OpenSSH onu yüklemeyi reddediyor, sunucu ssh-rsa'yı (SHA-1 imzaları) devre dışı bırakan OpenSSH 8.8+ çalıştırıyor, ya da anahtar doğru kullanıcının authorized_keys dosyasında değil.

Herkese açık anahtarımı bir sunucuya nasıl eklerim?

ssh-copy-id user@host çalıştırın — herkese açık anahtarınızı doğru izinlerle ~/.ssh/authorized_keys dosyasına ekler. Parola ile giriş zaten kapalıysa, hâlâ erişiminiz olan bir konsoldan yapın.

— mrsaynothing

— mrsaynothing

Yapay zekâ, Linux ve self-hosting üzerine saha notları.

Get the next one by email

One email per post. No spam, no algorithms.

self-hosted · no third parties · one-click unsubscribe

what is this?

Gitignore Çalışmıyor mu? İşte Asıl Çözüm

Yazıları beğendiniz mi? Ben geçim için böyle inşa ederim. beni işe al