Belirli bir ana bilgisayar anahtarını SSH'nin known_hosts dosyasından çıkarmak mümkün müdür?


310

Belirli bir ana bilgisayar anahtarını SSH'nin known_hosts dosyasından çıkarmak mümkün müdür?

Genelde known_hosts, yapmayla ilgili hiçbir sorunum bulunmayan, ancak meraktan tamamen dolan tek bir girişi silmek mümkün müdür?

known_hostsDosyayı açtım , ancak içeriğini anlamak için mücadele ediyorum.

Karşılaştığım mesaj aşağıda, bu soruyu sormamı sağladı:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.

Yanıtlar:


515

Bilinen_host'lardan girdileri kaldırmak için bu komutu kullanın:

ssh-keygen -R hostname

21
Aynı zamanda bir IP adresi ile çalışır. Örneğin, Web sunucum için bir DNS ana bilgisayar kısayolum var. Özel ana bilgisayar adı ile IP adresi arasındaki bir çelişkiyi gidermek için, her ikisinin de girişlerini kaldırmak zorunda kaldım. Yani ssh-keygen -R xxx.xxx.xxx.xxx.
StrangeElement

@StrangeElement'in dediği gibi, bazen IP ana bilgisayarını ana bilgisayar adından da çıkarmanız gerekebilir.
Gonzalo Cao

4
Ayrıca otomatik olarak bir yedek tutar (osx Original contents retained as /Users/nha/.ssh/known_hosts.oldmakinemde: Ubuntu için de aynı olduğu varsayılarak).
nha

17
Ayrıca, standart olmayan ssh portu kullanıyorsanız, bu formatı kullanınssh-keygen -R [ssh.sssshh.com]:1234
Shiji.J

Bu soru için şimdiye kadar en iyi cevap. Bir çekicilik gibi çalışır
bademba

32

Evet, sadece bir anahtar kaldırabilirsiniz. Sadece bir editörde açın ve rahatsız edici satırı silin. Hata iletisindeki iki nokta üstündeki sayı satır numarasıdır, bu nedenle silinecek satır budur - örneğin 1. Satır.


1
Satır numarasını belirlediği hakkında hiçbir fikrim yoktu, bu inanılmaz yardımcı oldu.
deltree

19

Ben sadece geçenlerde ana bilgisayar anahtarını kullanmaya başladım, ancak onlarla uğraştığımda genellikle satır başına bir anahtar oluyor, bu yüzden dosyayı yedekle ve doğru olanı bulana kadar birer birer kaldır. Sonra diğerlerini geri ekle. Bunu yapmak için uzun bir yol biraz, ama çalışması gerekir.

Ayrıca bu hatayı temel alan ve hiçbir zaman hiçbir fikrinin olmadığı, dosyadaki ilk ana bilgisayar anahtarı olabilir.

vim ~/.ssh/known_hosts

ve vur

dd

sonra kaydedin.


Kullanabilirsiniz: satır numaralarını göstermek için vim'deki nu'yu ayarlayın. Takkat cevabı yine de en iyisidir.
Javier Rivera

Bunu yapabileceğini bilmiyordum. Gelecekte kullanacağım. Vim için satır numaralarını aramak için anlam tuttum Teşekkürler.
Buddy Lindsey

3

Ssh-keygen -R hostname kullanmak her zaman işe yaramayacaktır. SSH aracısı kaçırma önlemek için ana bilgisayar adlarını "gizleyen" SSH'nin daha yeni bir sürümüne sahipseniz, görünüşte ssh-keygen, ana bilgisayar adını kaldıramaz.

Örneğin, build-node-01 adında bir ana makinem var ve ona bağlandım ve anahtarı kabul ettim. Daha sonra sıfırdan yeniden yapıyorum, yeni bir ana bilgisayar parmak izi alıyorum ve yeniden bağlanmayı deniyorum, X hattında bir çatışma olduğunu belirten bir uyarı alacağım (diyelim 3). Koştum ssh-keygen -R hostname, fakat bir daha bağlanmaya çalıştığımda hala bir çatışma olduğuna dair bir uyarı alıyorum. Dosyayı yalnızca ana makine adının toplandığını ve [1] Bu4Ch@R@4D0M57uFFokunabilir bir ana bilgisayar adı olarak gösterildiğini keşfetmek için inceledim .

Bu durumda, rahatsız edici ana bilgisayarı başarıyla kaldırmanın tek yolu kullanmaktı.

sed -i 'xd' ~/.ssh/known_hosts

Bu adımı bir adım daha ileriye götürmek için, yanlış satırı silmeniz durumunda known_host'lerin yedeğini almak isteyebilirsiniz, bu durumda sadece bununla bir yedekleme oluşturmak için -i seçeneğine bir .bak (veya herhangi bir uzantı) ekleyin. uzantı. Ssh-keygen kullanmak bunu otomatik olarak yapar.

sed -i.bak 'xd' ~/.ssh/known_hosts

5
Bu doğru değil. ssh-keygen -R {hostname}hostnames 'gizli' olsa bile (karma) çalışacaktır. Yine de, evet, bir numara girişi silebilir (örneğin, 10. giriş yolu ile sed -i.bak 10d ~/.ssh/known_hosts), ancak bu genellikle gerekli değildir. Bu standart dışı bir port bu durumda, siz (not tırnak) olarak komutunu biçimlendirmek gerekebilir, kullanıldığını olabilir:ssh-keygen -R '[hostname]:2222'
michael

@Michael_n'i tanımak iyi, muhtemelen girişi kaldırma yeteneğimi etkileyen standart dışı bir bağlantı noktasıydı. Ayrıca, bir ana bilgisayar için birden fazla parmak izi kabul ettiyseniz, TÜM girişleri bir kerede mi yoksa bir seferde mi sileceğinden emin değilim.
dragon788

1

Sadece bulduğum başka bir temiz ve kolay cevap paylaşmak için. Known_hosts dosyası karma olduğu için ana bilgisayar adını kaldırmak benim için değil. Ancak, ana bilgisayar girdisini hata iletisindeki satır numarasına göre manuel olarak düzenleyebilirim. Daha önce Mike Scott tarafından belirtildiği gibi, rahatsız edici ana bilgisayar adı satır numarası hata mesajındadır.

Veya bunu yapabilirim. Buradan: ssh known_hosts dosyasındaki rahatsız edici anahtarı nasıl düzeltilir?

Bu biraz sihir aldım

sed -i 'xd' ~/.ssh/known_hosts

X'i satır numarasıyla değiştirin ve işte. Ayrıca sed işe yaramazsa bir perl cevap sunuyor.


0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

Bu durumda, 10.20.120.211 bilinen_hosts dosyamdan silmek istediğim ana bilgisayardır, (.) Gibi özel karakterlerden kaçtığınızdan emin olun.


IP adresleri ve ana bilgisayar adları artık bilinen ana bilgisayar dosyasında sözlü olarak kaydedilmez (metni temizle), bu nedenle çalışmaz. Biri ya kullanmalı ssh-keygen -R ...(tercihen); veya sedsilinecek belirli hat numarası ile. Ayrıca, sedyerinde, -i' option; e.g., 10. satırı silmek için sed -i.bak 10d ~ / .ssh / known_hosts` komutunu kullanın ve (isteğe bağlı olarak) orijinali ekli bir yedekleme dosyasında tutun .bak.
michael

0

Belirli bir ana bilgisayarı güncelleyerek kaldırarak kaçınabilirsiniz:

ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts

Bu şekilde tekrar ana bilgisayara bağlanmak zorunda kalmazsınız.

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.