SSH into a box with a frequently changed IP
Solution 1:
Addition: you could try only disabling the CheckHostIP check for that name:
Host *
[ global settings .. ]
Host very.dynamic.host
CheckHostIP no
Solution 2:
Edit your ssh_config file and add change this line:
CheckHostIP no
CheckHostIP defaults to 'yes'. What this does is to do just the kind of check you're failing. Turning it off means it just trusts that the IP is variable, and will to key-checking against the hostname.
Solution 3:
A lot of the answers here will work - but technically they're workarounds. OpenSSH already has a built-in feature with this in mind: HostKeyAlias
.
In your .ssh/config file, add HostKeyAlias <alias>
to a host configuration:
host myserver.example.com
HostKeyAlias myserver.example.com
With this in place, connecting to server myserver.example.com
will not use the hostname or the IP address for the local reference - it will always only use the given HostKeyAlias when connecting to that server. For me it makes sense to use the hostname - but you can of course use any alias you like.
Typical configs for myself for dynamic hosts are like so:
host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com
This can also be used in some obscure scenarios where you know a bunch of your servers have the same host keys (generally this should not be the case). This would then prevent duplicate entries. In future, if the keys legitimately change, you don't have to replace/delete multiple entries. Only one. Gitlab Geo servers are a good example of this.
Regarding clearing the known_hosts file, I would suggest looking at other questions/answers specifically related to maintaining/removing stale known_hosts entries. For example, see https://serverfault.com/questions/29262/how-to-manage-my-ssh-known-hosts-file ; I'm especially impressed by user1953828's answer, though I see it doesn't have many upvotes (yet). :)
Solution 4:
I use these dodgy options to work around this problem. (My host's public key is regenerated quite often. so this removes the IP and Key check)
ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"
You can also just use this if the Key stays the same but the IP changes:
ssh remoteServerName -l username -o "CheckHostIP=no"