# offending key aus known_hosts löschen

Welcher Linux-Admin kennt es nicht. Ein Server wurde neu installiert oder der SSH-Hostkey hat sich geändert und jetzt wird beim Versuch sich einzuloggen folgende Meldung angezeigt:

<div id="bkmrk-%40%40%40%40%40%40%40%40%40%40%40%40%40%40%40%40%40%40%40%40"><div>```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
1a:d4:e6:4f:1a:4f:61:ef:bc:b8:37:a3:22:d9:70:40.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:898
RSA host key for meinserver has changed and you have requested strict checking.
Host key verification failed.
```

</div></div>Um sich nun wieder mit dem Ziel verbinden zu können, muss der alte Hostkey aus der known\_hosts Datei entfernt werden. Die einfachste Methode ist mit einem kleinen Helper-Script:

<div id="bkmrk-%23%21%2Fbin%2Fbash-%23-2010-o"><div><dl class="code"><dd>```
<span class="co0">#!/bin/bash</span>
<span class="co0"># 2010 Oliver Voelker <code@magenbrot.net></span>
<span class="co0"># </span>
<span class="co0"># delete the given line number from ~/.ssh/known_hosts</span>
<span class="co0">#</span>
<span class="kw1">if</span> <span class="br0">[</span> <span class="co1">${1}</span> <span class="re5">-gt</span> <span class="nu0">0</span> <span class="br0">]</span>; <span class="kw1">then</span>
  <span class="kw3">echo</span> <span class="st0">"Deleting line <span class="es3">${1}</span> from ~/.ssh/known_hosts"</span>
  <span class="kw2">sed</span> <span class="re5">-i</span> <span class="st0">"<span class="es3">${1}</span>d"</span> ~<span class="sy0">/</span>.ssh<span class="sy0">/</span>known_hosts
<span class="kw1">else</span>
  <span class="kw3">echo</span> <span class="st0">"Clear <line> from ~/.ssh/known_hosts"</span>
  <span class="kw3">echo</span> <span class="st0">"Usage: <span class="es3">${0}</span> <line>"</span>
<span class="kw1">fi</span>
 
<span class="kw3">exit</span> <span class="nu0">0</span>
```

</dd></dl></div></div>Einfach in ~/bin oder /usr/local/bin ablegen. Beim Aufruf des Scripts einfach die angemeckerte Zeilennummer angeben (z.B. „ck 898“) und die betreffende Zeile wird aus der Datei gelöscht.

Sollte euer Sed keine -i Option besitzen, kann die Zeile etwa auch durch Perl entfernt werden:

<div id="bkmrk-perl--ni--e-%E2%80%98print-i"><div>```
perl <span class="sy0">-</span>ni <span class="sy0">-</span>e ‘<a href="http://perldoc.perl.org/functions/print.html" rel="noopener" target="_blank"><span class="kw3">print</span></a> <span class="kw1">if</span> <span class="br0">(</span><span class="co5">$.</span> <span class="sy0">!=</span> <span class="nu0">898</span><span class="br0">)</span><span class="sy0">;</span>’ <span class="sy0">~/.</span>ssh<span class="sy0">/</span>known_hosts
```

</div></div>Alternativ über den VI-Editor:

<div id="bkmrk-vi-%2B898d-%2Bx-%7E%2F.ssh%2Fk"><div>```
vi +898d +x ~/.ssh/known_hosts
```

</div></div>und es gibt sicherlich noch viele weitere Methoden da draußen ;)