Soru “Known_hosts'da doğru ana bilgisayar anahtarını ekle” / ana bilgisayar adı başına birden çok ssh ana bilgisayarı anahtarı?


Kontrol ettiğim bir bilgisayara girmeye çalışıyorum, tanıdık mesajı alıyorum:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
[...].
Please contact your system administrator.
Add correct host key in /home/sward/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sward/.ssh/known_hosts:86
RSA host key for [...] has changed and you have requested strict checking.
Host key verification failed.

Gerçekten anahtarı değiştirdim. Ve bu sorunu çözmenin yolunun eski anahtarın known_hosts dosya.

Ama benim istediğim, ssh'in hem eski anahtarı hem de yeni anahtarı kabul etmesi. Hata mesajındaki dil ("Add correct host key") eskisini kaldırmadan doğru ana bilgisayar anahtarını eklemenin bir yolu olması gerektiğini öne sürüyor.

Yeni ana bilgisayar anahtarını, eski olanı kaldırmadan nasıl ekleyeceğimi anlayamadım.

Bu mümkün mü, ya da sadece son derece yanıltıcı hata mesajı mı?


121
2017-10-13 14:01


Menşei


Bu, hatayı üreten ana bilgisayar anahtarıdır. Bir ev sahibi bir ve sadece bir anahtara sahip olmalıdır. Bunun istemci veya kullanıcı anahtarları ile ilgisi yoktur. Farklı ana makineler veya bir şeyler arasında yüzen bir IP adresiniz var mı? - David Schwartz
Benim durumumda, bazı şeylerle uğraşırken, yakın gelecekte iki anahtar arasında geçiş yapacağımı biliyorum. Görünüşe göre, bu, önerdiğiniz birden çok ana bilgisayar durumuyla bir IP'de de yararlı olacaktır. Özellikle, sadece herhangi bir pratik uygulama dışında kendi eğitimim için bunun mümkün olup olmadığını bilmek istiyorum. - Samuel Edwin Ward


Cevaplar:


  1. sunucunuzun rsa anahtarını edinin:

    $ ssh-keyscan -t rsa server_ip
    # server_ip SSH-2.0-OpenSSH_4.3
    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
    
  2. ve istemcide bu anahtarı ekleyin ~/.ssh/known_hosts:

    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqx9m529...(the offending key)
    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
    

126
2017-10-13 14:38



Bu işe yaradı! Ancak, "HashKnownHosts" kullanıyorum, bu yüzden giriş biraz dışarıda görünüyordu. Neyse ki ssh_config (5), ssh-keygen'e (1) işaret ederek, habersiz girişleri düzeltmek için "ssh-keygen -H" yi kullanabileceğimi açıkladı. Teşekkür ederim! - Samuel Edwin Ward
Bu "çalışır" ama anahtarı doğrulamıyorsunuz, bu yüzden mitral saldırılara karşı savunmasızsınız ... - JasperWallace
@JasperWallace, ilk adım güvenli bağlantı üzerinden yapıldığı sürece (örneğin localhost kullanarak) oldukça güvenli olmalı, bence - ony
Tüm anahtar türlerini sunucudan toplamanın bir yolu var mı? Bazen RSA, DSA, ECDSA, RSA1 ... vb. Olup olmadığını bilmiyorsunuz. - Sopalajo de Arrierez
@SopalajodeArrierez aynı manpage ayrıca türleri virgülle ayırabileceğinizi de söylüyor ssh-keyscan -t rsa1,dsa,rsa,ecdsa,ed25519 server_ip - ama bulmak için tek sebep rsa1 ve dsa anahtarlar yükseltilmesi / yeniden yapılandırılması gereken sunucuları tanımlamaktır - kbolino


Bunu kullanarak bilinen_hosts girişini kaldırın:

ssh-keygen -R *ip_address_or_hostname*

Bu, sorunlu IP'yi veya ana makine adını kaldırır. known_hosts dosya ve tekrar bağlanmayı deneyin.

Man sayfalarından:

-R hostname
  Bir bilinen_hosts dosyasından ana bilgisayar adına ait tüm anahtarları kaldırır. Bu seçenek hashed ana bilgisayarlarını silmek için kullanışlıdır (bkz. -H seçeneği   ile elde edilmiş).


74
2018-02-09 06:49



msgstr "eski ana bilgisayarı kaldırmadan yeni ana bilgisayar anahtarını nasıl ekleyebilirim." - Samuel Edwin Ward
Bu en iyi çözüm! - Thomas Decaux
Bunun 19 oyu nasıl? Sorulan soruya cevap vermek yakına gelmiyor .. - Molomby
Sorunuz, "git ssh güncelleme ana bilgisayarı anahtarı" için google'a geldiğimde ikinci sırada geliyor. Bu cevap aradığım şey. Tam olarak istediğimle yeni bir soru açmak, kopya olarak kapatılabilir. - Jason Goemaat
Ana bilgisayar adı da çalışıyor - damluar


Çok basit bir yol:

cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak

Sonra orijinal anahtarı temizlemek için known_hosts dosyasını düzenleyin, ardından aşağıdakileri kullanarak ana bilgisayara ssh:

ssh name@computer

Yeni anahtarı otomatik olarak ekleyecektir; sonra iki dosyayı karşılaştırın. Kaynak gibi bir program, iki dosyayı karşılaştırmanın güzel bir yoludur. Daha sonra, bilinen anahtarın her iki anahtarı da içerecek şekilde birleştirin.

İki tuşun tutulması için 'nedenim', hedef sistemin çoklu önyükleme olduğu yönündedir, ancak kurulumlarda anahtarların senkronize edilmesinin bir yolu olduğunu söylesem de, birden fazla tuşa izin vermek daha kolay görünüyor.

DÜZENLE 2015/06

Şimdi tekrar eklemeliyim ki, daha basit bir şekilde fark ettim: [giriş, tanımlanabildiği sürece, normalde ana konumdan / IP adresinden, belirli bir konuma referans veren hata mesajından başka bir şekilde];

  1. 'Eski' girişin başında # eklemek için bilinen_kullanıcıları düzenle known_hosts geçici olarak
  2. [Ssh'i ana bilgisayara bağla], 'otomatik' yeni anahtarı eklemeyi kabul et
  3. Sonra # kaldırmak için known_hosts yeniden düzenlemek

HostKeyAlias'taki gibi bir seçenek var.

ssh -o HostKeyAlias=mynewaliasforthemachine name@computer

daha sonra, ssh istemcisi yeni adın diğer adın altına eklendikten sonra, alias için 'gerçek' ana bilgisayar adını / IP adresini veya bilinen ana bilgisayar seçeneğiyle bu ana bilgisayarın bu enkarnasyonuna bağlanabilmek için, bilinen_devveleri düzenleyebilir veya


16
2018-04-30 22:29



Bu 'kaynak'? meldmerge.org - Samuel Edwin Ward
Bu meld :) apt-get / yum yükleme adı sadece meld - Mark
Ben iyi çalıştı öneri bir varyantı yaptım - yerine cp, mv, sonra ssh, sonra kedi ~ / .ssh / known_hosts.bak ~ / .ssh / known_hosts> tmp; mv tmp ~ / .ssh / bilinen_hosts - Peter N Lewis


Birkaç farklı sistemle (kol ikili dosyaları, proje, xbmc, vb. Derleme sistemi) önyükleme yaptığım ve aynı problemle karşılaştığım bir ahududu pi ile aynı sorunu yaşıyorum. Yerel bir ağda DHCP kullanıyorlar ve MAC adresim aynı olduğundan yönlendiricim her zaman aynı IP'yi yeniden kullanıyor. Hosts dosyamda farklı alan adları kullanarak çözdüm:

10.10.10.110 pi-dev
10.10.10.110 pi-xbmc
10.10.10.110 pi-etc

Known_hosts dosyası, parmak izlerini ana bilgisayar adına kaydeder, aynı IP adresi olsa bile, her bir ana bilgisayar adı farklı bir girdi alır.

Yeni bir sistem kullandığımda her defasında ana bilgisayar dosyalarına isim eklemekten bıktım, bu yüzden ip adreslerinde baştaki sıfırları kullanarak daha lazier bir şekilde geldim:

$ ssh pi@10.10.10.110
$ ssh pi@010.10.10.110
$ ssh pi@10.010.10.110

IP adresinin (varyasyonu olmayan) her bir varyasyonu, bilinen_host'larda kendi girişini alır.


7
2017-11-04 02:28



OpenSSH milletvekilleri bana bilgeydi, bu boşluk daha yeni sürümlerde artık çalışmıyor. - Mike
Kullanabilirsiniz CheckHostIP no içinde ~/.ssh/config hala boşlukları kullanabilmek. Takma adlarınızı orada bile tanımlayabilirsiniz, böylece kandırmak zorunda kalmazsınız. /etc/hosts ve tanımla CheckHostIP no sadece bu 3 hostname için. - GnP


Hem istemci hem de sunucunuz OpenSSH 6.8 veya daha yeni sürümlere sahipse, UpdateHostKeys yes seçeneğiniz ssh_config veya ~/.ssh/config. Örneğin:

Host *
    UpdateHostKeys yes

Bu, SSH'nin sunucunun sahip olduğu tüm ana bilgisayar anahtarlarını saklamasını sağlar. known_hostsve bir sunucu bir ana bilgisayar anahtarını değiştirdiğinde veya kaldırdığında, anahtar da değiştirilir veya kaldırılır. known_hosts.


2
2017-09-22 04:28



Bu, en kullanışlı cevaptır! Bir ana bilgisayar anahtarının değiştirilmiş olması durumunda orijinal soruyu çözmenin bir yolunu açık bir şekilde önermese de, diğer tüm yanıtlar, yeni ana bilgisayar anahtarını doğrulamadıkları için güvensizdir. Bu seçenek, yeni ana bilgisayar anahtarlarına güvenli geçiş yapmanızı sağlar. - Jaap Eldering


Neden iki anahtarla çalışmak istediğinizi anlamıyorum ama kesinlikle birden fazla geçerli anahtar ekleyebilirsiniz. ~/.ssh/known_hosts dosya, ancak bunu elle yapmanız gerekecek.

Başka bir çözüm kullanmak StrictHostKeyChecking=no Bu özel ana makine için seçenek:

ssh -o StrictHostKeyChecking=no user@host

bir takma isminde ~/.profile Veya benzeri.

alias hc=ssh -o StrictHostKeyChecking=no user@host

1
2017-10-13 14:49



StrictHostKeyChecking bu durumda yardımcı görünmüyor; Görünüşe göre, yalnızca host, bilinen_hosts dosyasında olmadığında davranışı belirtir. Burada belirtilen: gossamer-threads.com/lists/openssh/dev/45349#45349 - Samuel Edwin Ward
Burada çalışıyor. Uyarıyı alacaksınız, ancak giriş devam ediyor. - Sven♦
Bu garip. Şifre doğrulama kullanıyor musunuz? OpenSSH kullanıyor musunuz? - Samuel Edwin Ward


Eğer sen sadece Yerel bir ağa ssh sonra ...

Basit bir çözüm, eski anahtar dosyasını silmek ve boş bir ile değiştirmektir. Bu, tüm bağlantılarınızı yeni anahtarlarla tekrar gözden geçirmenizi sağlayacaktır. Yerel ağınızın dışındaki sitelerde saklanan ssh anahtarlarınız varsa, o ilk sunucuya bağlandığınızda ilk bağlantınızın güvenli olduğundan emin olmanız gerekir.

Örneğin

cp known_hosts known_hosts.old
rm known_hosts
nano known_hosts

Daha sonra boşluğa basın, yeni arabelleği (dosya) kaydetmek için cntl + x ve 'y' tuşlarına basın. Kötü uygulaması, ancak yerel ağınızın dışında düzenli olarak ssh'leme sağlamayacak olursanız (örn. Bir uni veya iş sunucusu)

Güvenli bir yerel ağda bu güvenlidir çünkü orta saldırıda bir erkeği alamazsınız.

Anladığınız kodu kullanmak her zaman daha iyidir!


0
2018-06-15 21:44



Tüm silme known_hosts Dosya her zaman ssh tarafından sağlanan güvenlik çoğu reddetmek için gidiyor. - kasperd
Aslında, güvenli bir dahili ağda, kodunuzu anlamak ve güvenliği kod atmaktan ziyade güvenliği engellemek daha güvenlidir. Dış bir ağda o zaman durum farklı olurdu. - Aaron


Bu kadar çok cevap var, ama bu kadar çok kişi, katı ana bilgisayar denetimini tamamen kapatarak veya ilgisiz ana bilgisayar bilgilerini yok ederek veya yalnızca kullanıcıyı beklenmedik bir durumda, muhtemelen daha sonra bir noktayı etkileşimli olarak kabul etmeye zorlayarak koruma sağladı.

Burada sıkı ana makine denetimini bırakmanıza izin veren basit bir teknik var, ancak anahtarı beklemek değiştirmek için:

  • Eski anahtarı kaldırın ve tek komutta güncelleyin

    ssh-keygen -R server.example.com && \
        ssh -o StrictHostKeyChecking=no server.example.com echo SSH host key updated.
    
  • Kullanırsanız IP adresi (ler) veya diğer ana bilgisayar adları ile tekrarlayın.

Bu yaklaşımın avantajı, sunucuyu tam olarak bir kez yeniden oluşturmasıdır. Ssh-keygen'in çoğu sürümü, silmeye çalıştığınız sunucu bilinen hosts dosyasında yoksa, bir hata döndürmüyor gibi görünüyor, bu sizin için bir sorunsa, sırayla iki komutu kullanın.

Bu yaklaşım ayrıca bağlantıyı doğrular ve ssh komutunda (giriş, ana bilgisayar anahtarını ve çıktılarını güncelleyen) günlükler için güzel bir mesaj gönderir. SSH ana bilgisayar anahtarı güncellendi sonra hemen çıkar.

Ssh-keygen sürümünüz sıfır olmayan bir çıkış kodu döndürürse ve bu hatadan bağımsız olarak veya önceki bağlantıdan sorumlu olmayı tercih ederseniz, ssh-keygen komutundaki hataları görmezden gelerek sırayla iki komutu kullanabilirsiniz.

Bu tekniği kullanırsanız, ssh komutunuzu değiştirmenize veya bir ssh komutu haricinde ana bilgisayar denetimini kapatmanıza gerek yoktur. Gelecekte ssh oturumlarının çakışmadan çalışacağından veya yukarıdaki ssh komutunun hatasız çalıştığı sürece yeni bir anahtarı açıkça kabul etmeye ihtiyaç duyacağından emin olabilirsiniz.


-1
2017-09-18 01:56





Bende aynı problem vardı.

Tek yaptığım sudo nano /home/user/.ssh/ host_allow ve anahtarı sildiniz.

Sunucuya geri döndüğümde yeni bir anahtar ekledi.


-3
2018-05-18 11:31



Bunun neden olduğuyla ilgili bazı daha fazla bilgi cevaba yardımcı olabilir. - Drew Khoury


Hatalı çizgiyi kaldırmak için sed komutunu kullan

OUTPUT: as show in above example
Offending key in /home/user/.ssh/known_hosts:86

Satır 86 bilinen konakçılarda belirtildiği gibi kaldırın.

CODE: 
sed -i '86d' /home/user/.ssh/known_hosts

Bir dahaki sefer ssh kullanarak erişirken, sistem otomatik olarak yeni anahtar ekleyecektir.

ssh'in yeni sürümleri

kullanın:

ssh-keygen -R <hostname|ip address>

Hostname girişini kaldıracak ve eski yedeğini alacaktır. .known_host gibi known_hosts.old


-4
2018-06-14 05:47



"Ama istediğim, ssh'in hem eski anahtarı hem de yeni anahtarı kabul etmesi." Cevabınız bunu yapmaz. - Samuel Edwin Ward