“Ana bilgisayar anahtarı doğrulama başarısız oldu…” hatası ile SSH bağlantısı sorunu


179

LAN'ımdaki başka bir Ubuntu makinesine SSH ile bağlanabiliyorum. Her ikisinde de PC'ler openssh-server kurdum fakat başka bir Ubuntu bilgisayardan SSH üzerinden bilgisayarıma bağlanamıyorum ve şu hatayı aldım:

Ana bilgisayar anahtarı doğrulaması başarısız oldu ...


1
Ana bilgisayar adlarını veya IP adreslerini kullanıyor musunuz?
Thorbjørn Ravn Andersen

Benzer değil ama aynı hatayı aldım ancak farklı bir sorun yüzünden: serverfault.com/questions/494916/…
zengr 28:13 '

Bu, Ubuntu'ya özgü bir sorun değildir. Herhangi bir sshkomut satırından olabilir.
MarkHu

Yanıtlar:


216

"Ana bilgisayar anahtarı doğrulaması başarısız oldu" , uzak ana bilgisayarın ana bilgisayar anahtarının değiştirildiği anlamına gelir .

SSH, uzaktaki ana bilgisayarların ana bilgisayar anahtarlarını saklar ~/.ssh/known_hosts. Bu metin dosyasını elle düzenleyebilir ve eski anahtarı kaldırabilir (satır numarasını hata mesajında ​​görebilirsiniz) veya

ssh-keygen -R hostname

Gönderen adam sayfası :

-R ana bilgisayar
adı Bilinen_hosts dosyasından ana bilgisayar adına ait tüm anahtarları kaldırır. Bu seçenek, karma ana bilgisayarları silmek için kullanışlıdır.

(hangi cevabından öğrendiğim, SSH'nin bilinen_hosts dosyasından belirli bir ana bilgisayar anahtarını kaldırmak mümkün mü? ).


4
Aynı zamanda uzaktaki ana bilgisayarın ana bilgisayar anahtarına sahip olmadığınız anlamına da gelebilir. Örneğin, eğer ben rm ~/.ssh/*, o zaman ssh -o BatchMode=yes root@somewherebaşka bir şey yanlışsa, alacağım Host key verification failed. aynı sorunu yaşamaya devam komut dosyaları için değil, her zaman interaktif iseniz önemli ama alakalı.
Ron Burk

Şaşırtıcı olmayan bir şekilde, ssh-keygen -R example.net:7999verim Host example.net:7999 not found in known_hosts.
alex,

known_hostsDosya ve ssh'yi tekrar kaldırdım . İşe yaradı.
ParisaN

dosya ~/.ssh/known_hostsokunamıyor
João Pimentel Ferreira

128

Eklenti ana bilgisayar anahtarına etkileşimli erişiminizin olmadığı bazı uzak / komut dosyası durumlarında çalışıyorsanız, bunun gibi çalışın:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

Uyarı: Bilinen ana bilgisayar listesine kalıcı olarak 'bir şey.example.com, 10.11.12.13' (RSA) eklendi.


6
+1, bu çirkin bir çözümdür, ancak bazı durumlarda, dymaic ip bağlantılı cihazlarla çalışan otomatik izleme süreçleri için, bu basit ve kabul edilebilir bir çözümdür.
Ninsuo

11
+1 Örneğin, Jenkins infazları için bu iyi bir çözümdür. Teşekkürler
Lobo

5
@Lobo daha fazla kabul edemez, serin olan jenkins için kullanıyorumsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd

Hayatımı kurtardı. Hayat kurtarıcı çözüm.
user1735921 12:17

10

Ayrıca, bazen seri konsol üzerinde çalışırken bir durum ortaya çıkar, daha sonra ayrıntılı modda yukarıdaki komutu kontrol ederken, var olmadığını -vgösterir /dev/tty.

ssh -v user@hostname

Yukarıdaki durumda sadece kaldırmak /dev/ttyve bir sembolik oluşturmak /dev/ttyS0için /dev/tty.

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

Alternatif id_rsa.pubolarak, uzak konuma ekleyin , böylece parola sorulmaz ve oturum açma erişiminiz olur.


6
-V parametresini kullanmanızı önermek için +1; Bu, ssh problemlerinde hata ayıklama yaparken çok yardımcı olabilir.
daniel kullmann

8

Benim durumumda buna udev problemi neden oldu - /dev/ttycihaz düğümü yoktu . Benim için çözüm sadece:

sudo mknod -m 666 /dev/tty c 5 0

6

Terminalde:

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

Aşağıdaki mesaj veya benzerleri görünecektir:

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

Ardından EC2'nize normal şekilde bağlayın:

ssh -i YourPublickey.pem user@example.com

Anladım, command-line line 0: Bad yes/no/ask argument.yanlış 'hayır' yerine 'hayır' yerine argümanı kullandınStrictHostKeyChecking
Axel Bregnsbo

3

Eh, basitçe çünkü ikinci ubuntu parola ile değil de anahtarla bağlantı kurmayı gerektirir.

sudo dpkg-reconfigure openssh-serverPC'nizde kullanmanızı öneririm ve sonra düzgün çalışması gerekir. Openssh için yapılandırmayı sıfırlayacaktır ve varsayılan parola doğrulamasına geri dönmelidir.

İkinci olasılık, PC'nizdeki diğer ubuntularınız için zaten bir anahtar bulunması ve bu sayede değiştirilmemesi ve artık tanınmamasıdır. Bu durumda, .ssh/authorized_keysubuntu'nuzu tanımlayan problemli satırı kaldırmak için dosyayı düzenlemeniz gerekecektir .


3

Bu eski bir iş parçacığı ve sadece bu cevaba rastladım, sadece bunu çözmek için yaptığım şeyi ekleyeceğim.

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

Bana attığı hata mesajına baktım ve ana bilgisayar listesinden çıkarmak için bu komutu çalıştırmamı söyledi. Bundan sonra aşağıdakileri yaptım:

ssh-copy-id HOSTNAME

Daha sonra sunucudan ssh yapana kadar istemleri oradan takip ettim.


Bu komut olarak ubuntu 12.4'te öneri olarak alıyorum.
MaNKuR

2

Bu, uzak ana makine anahtarınızın değiştirildiği anlamına gelir (ana bilgisayar şifre değişikliği olabilir),

Terminaliniz bu komutu root kullanıcısı olarak yürütmeyi önerdi

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231

Bu ana bilgisayar adını, bilgisayar / sunucunuzdaki ana bilgisayar listesinden çıkarmalısınız. Önerilen komutu kopyalayın ve kök kullanıcı olarak çalıştırın.

$ sudo su                                                            // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231   // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                               // Exist from root user

$ sudo ssh root@www.website.net -p 4231                              // Try again

Umarım bu işe yarar.


1

Anahtarınızı şu şekilde değiştirmelisiniz: Verdiğiniz hatadan, örneğin hangi ana bilgisayar anahtarının değiştiğini bulun: Örneğin: /Users/user-name/.ssh/known_hosts:5'teki ECDSA anahtarını değiştirmek, 5. anahtarın değiştiğini söyledi:

sed -i '5d' ~/.ssh/known_hosts

Uyarı: sudo için root olmanız veya ayrıcalık sahibi olmanız gerekir.


Hayır, başkası için yapmadığınız sürece, root veya sudo gerektirmez. Dosyayı ana dizininizde düzenliyorsunuz. İkincisi: Komutun çalışması için GNU sed'i gerektirir.
Techraf

Belki de haklısın ama Mac OSX'ten ubuntu-server'a ssh yapmaya çalıştım ve bunu yapmak zorundayım. Bu arada, yorumunuz için teşekkür ederiz.
Amir.AG

1

Bunu hedef bilgisayarda /home/user/.ssh/known_hostsçalıştırarak hedef ana bilgisayarın rsa anahtarını kaynak ana bilgisayara koymanız gerekir.

ssh-keyscan -t rsa @targethost

1

Bağlanmaya devam etmek istediğinizi onaylamak için ssh onayladığında "evet" yazmanız yeterli olabilir.

Körüklü gibi.

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

Ardından şifrenizi girin.

Lütfen "Bağlanmaya devam etmek istediğinizden emin misiniz (evet / hayır)? Evet ". Girmelisin, evet girmelisin.


1

Ana bilgisayar anahtar denetimini kesinlikle devre dışı bırakmanın dışında, aşağıdakileri de yazarak bağlanabilirsiniz:

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts ve sadece yeniden bağlandıktan sonra tüm satırları silin ve yeni bir anahtar alacaksınız.


6
Bu tehlikeli bir çözüm çünkü TÜM ana bilgisayar anahtarlarınızı kaldıracaksınız. Kabul edilen çözüm, ssh-keygen -R hostnamedaha iyidir.
msanford

0

Benim çözümüm bu blog yazısından geliyor: SSH Secure Shell Client için algoritma müzakeresi başarısız oldu

Dosyayı aşağıdaki gibi değiştirmeniz gerekir:

sudo nano /etc/ssh/sshd_config

Ve sonra aşağıdakileri ekleyin:

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

Temel olarak, probleminizi çözebilecek bir çözüm bulana kadar farklı çözümler denediniz. Yukarıdaki çözümler işe yaramazsa, lütfen bunu deneyin. Bu da işe yaramazsa, lütfen başkalarını deneyin.


0

Sadece "sudo vi /var/root/.ssh/known_hosts" yapın ve bağlanmaya ve tekrar bağlanmaya çalıştığınız bir ana bilgisayarın anahtarını tutan satırı kaldırın.

Özel durumunuzu bilmiyorum, ama büyük olasılıkla bu hata şöyle bir mesajla geldi:

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

Günlüğü daha dikkatli okursanız, bir ana makineden aldığınız anahtarın zaten sahip olduğunuz bir anahtarla çakıştığını görürsünüz - bu durumda, bilinen_hosts dosyasının 74. satırında kök / .ssh / known_hosts: 74). Bilinen_host'lardan satırı kaldırın, değişiklikleri kaydedin ve yeniden bağlanın.


-1
chmod 666 /dev/tty 

Yine başka bir tty çözüm - bazen, bu aygıt dosyası yanlış izinlere sahip.

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.