SSH主机密钥似乎正在意外改变

我在Ubuntu 12.04testing服务器上使用Puppet推出了新的/etc/ssh/sshd_config 。 configuration与以前的configuration完全相同,除了它已经删除了以下行:

 HostKey /etc/ssh/ssh_host_ecdsa_key 

我注意到我收到了很多类似但不同的错误,试图连接到从那开始的那个盒子,例如:“ %hostname%的RSA主机密钥已更改,并且相应IP地址%ipaddress%的密钥未更改。 “

我以为这是因为我的电脑以前使用ECDSA密钥,现在不可用。 所以我sshd_config行加回到sshd_config并重新启动了SSH。

这并没有完全解决这个问题,从那以后,我一直在遇到不断的问题。 我可以很好地连接到服务器几次,甚至可以连续几天。 然后突然间,我开始得到错误,主机密钥已经改变,服务器停止接受我的公钥进行身份validation。

似乎总是有一阵子搞砸了一段时间,从不同的位置连接起来,我突然可以再次与我的公钥连接起来,而且我不再会得到一个可能的中间人(man-in-the-the-middle)的错误攻击。

我几天前尝试重新生成所有3个主机密钥(删除它们,然后运行dpkg-reconfigure openssh-server ,重新生成它们)。 正如所料,我必须删除旧的密钥,并接受新的之前,我可以连接。 我想也许它是固定的,但问题现在回来了。

没有任何修改/etc/ssh/任何主机密钥,因为我最后重新生成了它们 – 所以可能会导致我经常无法连接,使我的公钥无法工作,最终接受新密钥事情再次开始正常工作一段时间?

当事情不起作用的时候(当我得到有关主机密钥更改的错误,然后服务器停止接受我的公钥),没有任何东西写到服务器的/var/log/auth.log 。 这使我想到,也许它有时会碰到不同的机器,但我不知道这是可能的,因为DNS条目是正确的,并总是返回相同的IP地址。

有三个常见的原因,你会得到这个消息。
按照概率的粗略顺序,他们是:

  1. 您已经自己更改了主机密钥,并且未在客户机上清除或更新它们。
    这是最常见的情况。 检查关键文件,绝对是一成不变的。

  2. 您已经更改了您的SSHconfiguration以呈现(或请求)与以前不同的密钥types。
    例如,您以前需要RSA或DSA密钥,现在您使用ECDSA – 这是“重要更改”。
    如果是这种情况,请validation并接受新的密钥(或者如果这不是您想要的,请撤消更改)。
    (这听起来像你在情况#2 – 撤消你的改变,重新启动sshd,并validation事情按预期工作。如果你没有在任何地方接受新的密钥撤消改变应该使错误消失。

  3. 有人正在做某事
    中间人攻击SSH警告你已经养成了丑陋的头脑。 有人正在积极地试图拦截你的通信窃取你的私钥或做一些你几乎肯定不希望他们做的事情。


如果你消除了1,而你确定你没有做2,那么你应该假设3,直到你能certificate为止。 这意味着不要login 。 – 当用户忽略巨大的警告标语并将其钥匙交给攻击者时,世界上所有的SSH安全都无济于事。

调查你和你的服务器之间的通道,检查服务器的连接日志(从一个已知的良好的terminal),而你尝试login等 – 有太多的方法来执行攻击在这里,我不能枚举所有的可能的对策和检测策略,但IT安全人员肯定会有一些想法。