SSH İzni reddedildi (yayınlandı)


110

Yerel makinemden bir Linode'a bağlanmaya çalışıyorum (Ubuntu 12.04 LTS çalıştıran) (ayrıca Ubuntu 12.04 LTS çalıştıran)

Yerel makinemde bir özel ve genel anahtar oluşturdum ve genel anahtarımı Linode'nin yetkili_ anahtarlar dosyasına kopyaladım. Ancak, ne zaman benim Linode'ye ssh yapmaya çalıştığımda hata mesajı alıyorum Permission denied (publickey).

Linode cihazımda ssh'nin nasıl ayarlandığı ile ilgili bir sorun değil çünkü Windows bilgisayarımdan anahtar kimlik doğrulaması kullanarak ssh yapabiliyorum.

Benim içinde .sshbenim yerel Ubuntu makinede dizine, benim var id_rsave id_rsa.pubdosyaları. Yerel makinemden yetkili bir anahtar dosyası oluşturmam gerekir mi?

EDIT: Koşarken aldığım şey bu ssh -vvv -i id_rsa [youruser]@[yourLinode]:

debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).

4
1) SSH sunucusundaki günlükler istemcide bu hatanın olduğu zaman hakkında ne söylüyor? ( /var/log/auth.log) 2) Genel anahtarı sunucuya nasıl aktardınız? Her zaman ssh-copy-idizinlerden emin olmak için kullanın . Ana dizininiz, .sshdizininiz ve authorized_keysdosyanın sıkı izin gereksinimleri vardır. (bkz. sshd(8) sayfasındaki kılavuz ~/.ssh/authorized_keys). 3) Ubuntu'da yeni bir keypair ürettiniz mi? Anahtarı Windows’tan yeniden kullanmanız durumunda, önce onu OpenSSH formatına dönüştürmeniz gerekir.
gertvdijk

1
Komut gerektiğini olmuştur ssh -vvv -i .ssh/id_rsa ....lütfen değiştirin - - (! İd_rsa yolunu unutmayın) eski günlük sadece "biz" göndermek için hiçbir pubkey olduğunu göstermektedir.
guntbert

@guntbert .ssh 'ı kaçırdım çünkü zaten .ssh dizinindeydim. Ben de .ssh / id_rsa ile denedim ama aynı sonucu aldım
Pattle

Anladım, bu yüzden yanlış okudum - Lütfen soruları @gertvdijk adresinden cevaplayın.
guntbert

Yanıtlar:


90

PubKeyAuthentication

Müşterinizi kurun

  1. Anahtarını oluştur
    • ssh-keygen
  2. Anahtarı kullanmak için ssh'yi yapılandırın
    • vim ~/.ssh/config
  3. Anahtarınızı sunucunuza kopyalayın
    • ssh-copy-id -i /path/to/key.pub SERVERNAME

2. adımdaki config dosyanız aşağıdakilere benzer bir şey içermelidir:

Host SERVERNAME
Hostname ip-or-domain-of-server
User USERNAME
PubKeyAuthentication yes
IdentityFile ./path/to/key

Kimlik doğrulama sırasında sorunlara neden olan ve iyi bir uygulama olmayan kullanımların ve diğer anahtar dosyaların kullanılmadığından IdentitiesOnly yesemin olmak sshiçin ekleyebilirsiniz IdentityFile.

Sorun giderme

  1. "-vvv" seçeneğini kullanın
  2. Sunucunun PUBLIC anahtarınızın (.pub) olduğundan emin olun.
  3. IdentiyFile’nın ÖZEL anahtarınızı gösterdiğinden emin olun.
  4. .Ssh dizininizin 700 olduğundan ve dosyalarınızın 700 izinli olduğundan emin olun (rwx ------).
  5. tail -f /var/log/auth.log (sunucuda) ve giriş yapmaya çalıştığınızda hataları izleyin
  6. Çok sayıda anahtar dosyanız varsa IdentitiesOnly yes, tek ve belirtilen anahtarı kullanmak için kimlik doğrulamasını sınırlandırmaya çalışın .

1
Bilginize, github.com/centic9/generate-and-send-ssh-key adresinde küçük bir senaryo hazırladım, bir adımda gerekli adımları uygular ve ek olarak her zaman
başımı ağrıtan

1
Yalnızca 2. adımı ayrıntılandırmak için: IdentityFile~ / .ssh / config içindeki satır PRIVATE tuşuna işaret etmelidir.
Danny Schoemann,


3
Neden adım 4'te yürütme iznine sahip dosyaları ayarlamak isteyeceğinizi merak ediyorum?
Todd Walton

Aynı zamanda kullanıcı başına çok önemli hak izinleri (chown ve chmod kullanın) aksi halde sunucunuz ortak anahtarınız olsa bile reddedilmiş bir onay alırsınız.
joseluisq

61

Bazen sorun izinler ve mülkiyettir. Mesela, root olarak giriş yapmak istiyorsanız /root, .sshve authorized_keysroot'a ait olmalısınız. Aksi takdirde, sshd bunları okuyamaz ve bu nedenle kullanıcının oturum açmaya yetkili olup olmadığını söyleyemez.

Ana dizininizde:

chown -R your_user:your_user .ssh

Haklar gelince, 700 için .sshve 600 içinauthorized_keys

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

1
Bu cevap bana yardımcı oldu. Tavsiyeyi bu yayından aldım authorized_keysve dosyamı şifreli ana dizinin dışına taşıdım . Bunu yaparken, istemeden yanlışlıkla mülkiyeti değiştirdim root:root.
Jordan Grant,

Keşke iki kez, bir kez klasör için ve bir kez dosya için oy kullanabilseydim. İzinlerin kesin olması çok önemlidir.
Bay Griever,

Evet, başından beri izinlerdi.
a3y3,

bu sorunumu çözdü, bunun için teşekkürler.
Sathiyarajan

14

authorized_keysMüşterine ihtiyacın yok .

Ssh-istemcisine, oluşturduğunuz anahtarı kullanmasını söylemelisiniz. Bunu yapmanın birkaç yolu var. Sadece test tipi için ssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode]. Sunucuya her bağlanmak istediğinizde parolanızı vermeniz gerekecektir.

Eğer işe yaradıysa, anahtarı ile ssh-agentbirlikte ekleyebilirsiniz ssh-add .ssh/id_rsa(bunun için parolayı yalnızca bir kez sağlamanız gerekir ve çıkış / yeniden başlatmadığınız sürece çalışmalıdır)


Yardımınız için teşekkürler, önerinizi yazarken ne olacağını göstermek için cevabımı düzenledik.
Pattle

2
Bir anahtarı transfer etmek için, istemcide ssh-copy-id kullanın
Panther

@ bodhi.zazen Teşekkürler, ama zaten anahtarı transfer ettim, sorun bu değil
Pattle

4
“Ssh-istemcisine, oluşturduğunuz anahtarı kullanmasını söylemelisiniz.” Hayır, varsayılan olarak anahtarı varsayılan yoldan arayacaktır, örn ~/.ssh/id_rsa. Ayrıca, bir anahtar aracının kullanımı tamamen isteğe bağlıdır ve görebildiğim kadarıyla konu ile ilgisi yoktur.
gertvdijk

@gertvdijk, burada henüz gerçeklerin desteklemediği varsayımlar yapıyorsunuz - sistemde ne olduğunu bilmiyoruz.
guntbert

10

Ayrıca değerini kontrol PasswordAuthenticationbölgesi /etc/ssh/sshd_configve eğer nobunu değiştirmek yes. Bundan sonra ssh servisini yeniden başlatmayı unutmayın.


4
OP, şifre doğrulama kullanmaya çalışmıyor. Bazı fikirleri var ve ortak / özel anahtar kullanıyorlar.
ctrl-alt-delor

9

Sahip olduğum sorun müşterideki yanlış anahtarları kullanmaktı. İd_rsa ve id_rsa.pub ismini başka bir şeyle değiştirdim. Bunları varsayılan değerlerine geri döndürebilir veya ssh komutunu verdiğinizde bu şekilde kullanabilirsiniz.

ssh -i ~/.ssh/private_key username@host

1
Hayır, genel anahtarı kullanın
St3an

@ St3an kamu anahtarını sunucuya koydun, ama Todd gibi burada bağlantı kurduğun zaman, özel anahtarını kullanmalısın
Nathan F.

@NathanFiscaletti asla özel anahtarınızı göstermemelisiniz, bu yüzden özel. Özel anahtar, yerel ssh temsilciniz tarafından, özel anahtarınıza uygun bir genel anahtar verdiğinizi kontrol etmek için kullanılır. Makineler arasındaki SSH acenteleri, kullanıcıların :-) gibi davrandıklarını garanti eder
St3an

1
Kesinlikle. Bu yüzden bağlandığınızda, ssh-client'a özel anahtarınızı sağlarsınız. Sunucu genel anahtarınızı saklar. Yukarıdaki yazıdaki komut tam olarak özel anahtarların nasıl kullanılması gerektiği şeklindedir.
Nathan F.

7

Ayrıca, kullanıcının giriş dizininin (sunucudaki) gerçekte kullanıcının içine girdiğinden emin olun (root olarak ayarlandı: root).

Olması gerekirdi:

sudo chown username:username /home/username;

Yerel linux kutumda (örn. Abc), uzak sunucudaki kullanıcıdan farklı (örneğin ab@123.456.789) bir kullanıcı ile ortak / özel anahtarlarla ssh yapabiliyorum. Yerel kullanıcının yerel .ssh dosyalarına sahip olduğundan emin olmak zorundaydım (örn. Abc: abc, root: abc) `
Michael

Bu benim durumumda çalıştı
Zerquix18

3

Bu sorunla son zamanlarda web sunucumla karşılaştım.

Genelde, içindeki tüm sunucularımda yetkili anahtarların bir listesini tutarım ~/.ssh/authorized_keys2. Tecrübelerimiz, sshdarayacaktır ~/.ssh/authorized_keysveya ~/.ssh/authorized_keys2varsayılan olarak.

Web sunucum durumunda, /etc/ssh/sshd_configbu satır

AuthorizedKeysFile    %h/.ssh/authorized_keys

onun yerine

AuthorizedKeysFile    %h/.ssh/authorized_keys2

Sonuncuyu uyguladım, ssh arka planımı yeniden başlattım ve pubkey'imi kullanarak ssh ile oturum açarak sorunumu çözdüm.


Çok teşekkürler, bu bana bu satırın config ile tamamen yorumlandığını anlamamı sağladı!
Christian.D

2

Diğer bir olası sebep AllowedUserskonfigürasyonda olabilir /etc/ssh/sshd_conf. NOT: Zor yoldan öğrendiğim gibi liste boşlukla ayrılmış (virgülle ayrılmış değil).

AllowUsers user1 user2 user3

1

Hepsi başarısız olursa, oturum açma kullanıcınızın ssh’in AllowGroup grubuna ait olduğunu kontrol edin. Yani, kullanıcılarınız /etc/ssh/sshd_configsunucuda aşağıdaki satırda gösterilen grubun bir üyesidir :

AllowGroups ssh #Here only users of 'ssh' group can login

1

Benim durumum, müşteri ubuntu 14.04lts, sunucu cygwin çalıştıran 2012 sunucusudur. Cygwin'deki 2012 sunucu dizini / home / Administrator iken 'ssh manager @ xxxx' kullanıyordum. Bu yüzden büyük / küçük harf duyarlıydı, 'ssh Administrator @ xxxx' ı denediğimde (Yönetici üzerindeki A büyük harfine dikkat edin) sonra iyi çalıştı.

'Kullanıcı bulunamadı' gibi bir hata mesajı, “İzin reddedildi (publickey, klavye etkileşimli)” den çok daha hızlı bir şekilde beni çözüme ulaştırırdı.


Birisi bunu öneren ssh projesiyle ilgili bir sorunu kaydetmelidir. Benzer bir sorunla karşılaştım.
Ben Creasy

1

Bir cPanel Centos sisteminden normal bir kullanıcının (örneğin johndoe) ortak anahtarını AWS'deki bir Ubuntu sunucusuna kopyalarken de aynı sorunu yaşadım. Yukarıda gertvdijk tarafından önerildiği gibi, /var/log/auth.logyeterince kontrol ve kesinlikle söyledi Authentication refused: bad ownership or modes for directory /home/johndoe. Apache2 için varsayılan sanal ev sahibi Belge Kökü olarak /home/johndoeayarlamaya çalıştığımda yanlış bir şekilde 777'ye sahip olduğum ortaya çıktı /home/johndoe/public_html(bu görev için de gerekli değil).

Buradaki ve buradaki cevaplara da bakınız.

Sunucunun yalnızca ortak anahtara sahip olması gerekir .ssh/authorized_keysve istemcinin (üzerinde çalıştığınız bilgisayar) özel anahtara (.pem veya SFTP ile Filezilla, .ppk kullanıyorsanız) sahip olması gerekir.


1

Bu konuya gelen benim gibi Macun kullanıcıları için, kullanıcı kullanıcısı @ Ip eklemeyi unutursanız, bu hatayı alabilirsiniz.

Diğerleri anahtar dosya chmod 600 üzerinde izinli olan)

ssh 1.1.1.1 -i /path/to/.pem file 
Permission denied (publickey).`

ssh user@1.1.1.1 -i /path/to/.pem file 

1

Benim için işe yarayan şey buydu, düzeltme benim değil ama başkasının da aynı problemi olması durumunda buraya yazmayı tercih ederim.

Asıl yazar buraya gönderdi: dijital-okyanus-kamu-erişim-anahtarı-reddedildi

sudo nano /etc/ssh/sshd_config

Bunu değiştir

UsePAM yes
IgnoreUserKnownHosts no
PasswordAuthentication no

Bununla

UsePAM no
IgnoreUserKnownHosts no
PasswordAuthentication yes

Dosyayı kaydedin ve ssh'yi yeniden başlatın

reload ssh

ssh şimdi çalışarak şifre sormalı


1

Soruda tarif edilenle aynı problemi yaşadım. ssh -vvv -i id_rsa [youruser]@[yourLinode]İstemci makinede çalıştırmanın sonucu, soruda tarif edilene benzerdi. Diğer tüm dosyalarda önerildiği şekilde tüm dosya ve dizin izinlerini kontrol ettim ve haklılardı.

Bu oluşturulan dosyayı kopyalarken ortaya çıktı id_rsa.pubdosyası olarak, sunucu makineye ~username/.ssh/authorized_keys, yanlışlıkla kelimeyi ihmal ediyorum ssh-rsabaştan. Bunu eklemek sorunu çözdü.


1

16.04 Ubuntu'da da çalışıyor.

Sorun sshd_configdosya içinde

İşte ULTIMATE çözümü:

Ubuntu sunucusuna root olarak giriş yap

vi /etc/ssh/sshd_config

Şimdi en alta gidin ve değeri "hayır" dan "evet" e değiştirin.

Bu gibi görünmeli:

Tünellenmiş açık metin şifrelerini devre dışı bırakmak için hayır olarak değiştirin

PasswordAuthentication yes
service sshd reload

etkisine almak.

Şimdi yalnızca LOCAL makinenizden (aka laptop vb.) Gelen aşağıdaki komutu kullanarak bir anahtar yapabilirsiniz.

Yeni terminal penceresini açın ve sunucuya giriş yapmayın, sadece şu komutu girin:

ssh-copy-id john @ serverIPAdresi

(John'u kullanıcı adınızla değiştirin).

gitmen gerek


1

Merak eden bazı insanlar ssh erişimini sadece root hesabında anahtar olarak ayarladılar ve ardından yeni bir kullanıcı yarattılar ve gerek duyduklarını bilmiyorlardı.

ssh root@your-ip-address

rsync --archive --chown=[user]:[user] ~/.ssh /home/[user]

logout

O zaman tekrar dene. [User] yerine yeni kullanıcı hesabını kullan.

Bu, kurulum sırasında ssh anahtarlarını kullandığınızda DigitalOcean'da yeni bir sunucu kurulurken yaygındır.

https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04


0

Benim durumumda bu sorun .ssheski bir makineden bir dizin üzerinden kopyalamaktan kaynaklanıyordu . Eski SSH yapılandırmamın o zamandan beri kullanımdan kaldırılmış olan DSA anahtarlarını kullandığı ortaya çıktı . RSA tabanlı bu sefer yeni bir anahtar çiftine geçmek benim için problemi çözdü.


0

MachineA ve machineB'ye bağımsız olarak erişebiliyorsanız (örn. MachineC'den) aşağıdaki yöntem işe yarayabilir.

Eğer ssh-copy-id çalışmıyorsa, şifre doğrulama devre dışı bırakılabilir. Aşağıdaki bir geçici çözümdür .

Makine A'nın ortak anahtarının makine B'nin yetkili anahtarlarında (yani ~ / .ssh / onay_ tuşları) olması makine A'dan ssh yapmanıza izin verir. Bu aynı zamanda scp için de geçerlidir.

Anahtar çiftlerini oluşturduktan sonra: ssh-keygen

On MachineA , yürütmekcat ~/.ssh/id_rsa.pub

Örnek çıktı:

ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA

Yazdırılan anahtarı ( ⌘ Command+ Cveya CRTL+ C) kopyalayın, ardından makineB'deki ~ / .ssh / yetkili_keys dosyasına ekleyin .

Örneğin, aşağıdakini machineB'de yürütün :

echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.