Vraag Is het mogelijk om een ​​bepaalde host-sleutel te verwijderen uit SSH's known_hosts-bestand?


Is het mogelijk om een ​​bepaalde host-sleutel te verwijderen uit SSH's known_hosts-bestand?

Ik eindig meestal met het verwijderen van het geheel known_hosts bestand, waar ik geen problemen mee heb, maar gewoon uit nieuwsgierigheid, is het mogelijk om slechts een enkele invoer te verwijderen?

Ik opende de known_hosts bestand, maar ik heb moeite om de inhoud ervan te begrijpen.

Hieronder is de boodschap die ik tegenkwam, waardoor ik deze vraag stelde:

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.

249
2018-01-10 05:56


oorsprong




antwoorden:


Gebruik deze opdracht om vermeldingen van bekende_hosts te verwijderen:

ssh-keygen -R hostname

424
2018-01-10 07:43



Het werkt ook met een IP-adres. Ik heb bijvoorbeeld een DNS-snelkoppeling voor mijn webserver. Om een ​​conflict te verwijderen dat ik had tussen de sleutels voor de aangepaste hostnaam en het IP-adres, moest ik de vermeldingen voor beide verwijderen.So-keygen -R xxx.xxx.xxx.xxx. - StrangeElement
Zoals @StrangeElement zegt, is het soms mogelijk dat u ook een IP-host verwijdert, behalve de hostnaam. - Gonzalo Cao
Bovendien wordt er automatisch een back-up gemaakt (op mijn osx-computer: Original contents retained as /Users/nha/.ssh/known_hosts.old, ervan uitgaande dat dit hetzelfde is voor Ubuntu). - nha
Plus, als u een niet-standaard ssh-poort gebruikt, gebruik dan deze indeling ssh-keygen -R [ssh.sssshh.com]:1234 - Shiji.Jiang
Het beste antwoord ooit voor deze vraag. Werkt perfect - bademba


Ja, u kunt slechts één sleutel verwijderen. Open het gewoon in een editor en verwijder de overtredende regel. Het nummer na de dubbele punt in het foutbericht is het regelnummer, dus dat is de regel die moet worden verwijderd - regel 1 in uw voorbeeld ..


28
2018-01-10 06:00



Ik had geen idee dat het het regelnummer identificeerde, dat is ongelooflijk nuttig. - deltree


Ik ben pas sinds kort begonnen met het gebruik van host-sleutels, maar als ik er mee heb geknoeid is het over het algemeen één sleutel per regel dus maak een back-up van het bestand en verwijder ze één voor één totdat je de juiste hebt gevonden. Voeg vervolgens de anderen toe. Een beetje een lange weg om het te doen, maar zou moeten werken.

Ook gebaseerd op die fout, en zonder enig idee wat dan ook, zou het de eerste hostsleutel in het bestand kunnen zijn dat het probleem is dus open het bestand met vim

vim ~/.ssh/known_hosts

en druk op

dd

sla het dan op.


18
2018-01-10 06:01



U kunt gebruiken: zet nu in vim om de regelnummers weer te geven. Het antwoord van Takkat is hoe dan ook het beste. - Javier Rivera
Ik ben het met je eens dat je niet wist dat je dat kon doen. Ik ga het in de toekomst gebruiken. Ik bleef proberen de regelnummers voor vim op te zoeken. bedankt. - percent20


Het gebruik van ssh-keygen -R hostname zal niet altijd werken. Als je een nieuwere versie van SSH hebt die de hostnamen "verbergt" om ssh-agent-kaping te voorkomen, is ssh-keygen blijkbaar niet in staat om de hostnaam onschadelijk te maken.

Ik heb bijvoorbeeld een host genaamd build-node-01 en ik heb er verbinding mee gemaakt en de sleutel geaccepteerd. Ik herbouw het vervolgens helemaal opnieuw, krijg een nieuwe host-vingerafdruk en probeer opnieuw verbinding te maken, ik krijg een waarschuwing dat er een conflict is op regel X (zeg 3). ik ren ssh-keygen -R hostname, maar de volgende keer dat ik probeer te verbinden, krijg ik nog steeds een waarschuwing dat er een conflict is. Ik heb het bestand alleen onderzocht om te ontdekken dat de hostnaam hashed was en opdook als [1] Bu4Ch@R@4D0M57uFF in plaats van een leesbare hostnaam.

In dit geval was de enige manier om de aanstootgevende host met succes te verwijderen

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

Om dit nog een stapje verder te gaan, wil je misschien een back-up maken van de known_hosts in het geval je de verkeerde regel verwijdert, in dit geval voeg je gewoon een .bak (of een extensie) toe aan de optie -i om een ​​back-up te maken met die uitbreiding. Het gebruik van ssh-keygen doet dit automatisch.

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

3
2018-03-24 22:24



Dit is niet correct. ssh-keygen -R {hostname} zal werken, zelfs als hostnamen 'verborgen' (hashed) zijn. Nog steeds, ja, men kan de invoer op nummer verwijderen (bijvoorbeeld 10e invoer via sed -i.bak 10d ~/.ssh/known_hosts), maar dat is meestal niet nodig. Het kan zijn dat een niet-standaard poort werd gebruikt. In dat geval moet u de opdracht mogelijk opmaken als (notitieknoppen): ssh-keygen -R '[hostname]:2222' - michael
Goed om te weten @michael_n, het is zeer waarschijnlijk dat het een niet-standaard poort was die mijn vermogen om de invoer te verwijderen beïnvloedde. Ik moet ook opmerken dat als u meerdere vingerafdrukken voor een host hebt geaccepteerd, ik niet zeker weet of ALLE vermeldingen tegelijk worden verwijderd, of slechts één voor één. - dragon788


Gewoon om nog een schoon en eenvoudig antwoord te delen dat ik zojuist heb gevonden. Het verwijderen van de hostnaam is voor mij, omdat het bekende_hosts-bestand gehashed is. Ik kon echter de hostitem manueel bewerken op basis van het regelnummer in het foutbericht. Zoals eerder opgemerkt door Mike Scott, bevindt het regelnummer van de aanstootgevende hostnaam zich in het foutbericht.

Of, ik kan dit doen. Vanaf hier: hoe je de overtredende sleutel kunt herstellen in het ssh bekende_hosts-bestand

Ik kreeg een beetje cli-magie

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

Vervang de x door het regelnummer en voila. Hij biedt ook een perl antwoord als de sed niet werkt.


1
2018-02-20 00:37





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

In dit geval is 10.20.120.211 de host die ik wil verwijderen uit mijn known_hosts-bestand, zorg ervoor dat je de speciale tekens zoals (.) Kunt ontlopen.


0
2018-02-20 01:32



IP-adressen en hostnamen worden niet langer woordelijk (clear text) opgeslagen in het bekende hosts-bestand, dus dit zal niet werken. Men zou het moeten gebruiken ssh-keygen -R ... (bij voorkeur); of, sed met het specifieke regelnummer dat moet worden verwijderd. Ook om te sed op zijn plaats, gebruik -i' option; e.g., sed -i.bak 10d ~ / .ssh / known_hosts` om de 10e regel te verwijderen, en (optioneel) bewaar het origineel in een back-upbestand met het suffix .bak. - michael