closuresssh密钥的严格检查

每个用户每天创build并销毁15个虚拟机。 VM是在公司内部的OpenStack云中创build的。

每当一个新vm被分配一个先前分配的ip地址,用户就会得到可怕的主机密钥validation失败错误。 这是因为ssh密钥与用户known_hosts文件中的IP地址不匹配。

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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 xxxxxxxxxxx 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:4 RSA host key for domain.com has changed and you have requested strict checking. Host key verification failed. 

我能看到的两个解决scheme是:

  • closures严格的检查 – (安全风险)
  • 让用户运行ssh-keygen -R ipAddress – (用户已经厌倦了这个解决scheme,因为每天都会多次运行它)

有没有办法来防止这个错误信息,但保持安全? 也许closures只是一个特定的子网安全检查?

    主要functionHostKeyAlias解决您的问题:

     ssh -o HostKeyAlias=hostkeyalias__vm_2013-05-11_07 user@host 

    known_hosts创build一个条目hostkeyalias__vm_2013-05-11_07 (不含IP)。 当然,你可以编写一个脚本或shell函数,在每个ssh调用之前设置这个值。 或者你使用一个shellvariables:

     HOSTKEYALIAS=hostkeyalias__vm_2013-05-11_07 ssh -o HostKeyAlias=$HOSTKEYALIAS user@host 

    每当虚拟机发生变化时更改$HOSTKEYALIASknown_hosts旧的条目应该从known_hosts删除。

    创build~/.ssh/config的内容:

     Host * StrictHostKeyChecking no 

    或者,你可以为ssh创build一个别名来:

     ssh -o StrictHostKeyChecking=no 

    您可以从VM控制台检索新的主机密钥,并在启动实例后更新已知的主机文件。