SSH采用Trust On First Use方式避免中间人攻击,ssh第一次连接新主机是会出现主机公钥指纹确认提示:
输入yes保存主机公钥后,以后连接无需再次确认。如果主机公钥改变(例如重装了系统,服务端重新生成公钥)或者受到中间人攻击,连接时主机公钥会校验不通过,出现REMOTE HOST IDENTIFICATION HAS CHANGED警告:
主机公钥校验是防止SSH协议受到中间人攻击的重要安全保障,但在某些场合则很烦人。例如天河二号一个登录IP对应多个登录节点,每次会随机选择一个节点登录,因此连接时会频繁提示主机公钥改变警告。
常规解决办法是编辑 ~/.ssh/known_hosts
文件,把之前保存的key删除。或者用 ssh-keygen -R IP
清除公钥信息。但对于天河二号的场景,这两种方法同样很麻烦。
终极解决办法是禁用SSH主机公钥校验。幸运的是SSH有支持不校验主机key的选项,只需在 ~/.ssh/config
文件中对特定主机配置StrictHostKeyChecking和UserKnowHostsFile两个选项即可:
Host tianhe2 User xxxx Port xxxx IdentityFile ~/buaa_liutg_1.id StrictHostKeyChecking no UserKnownHostsFile=/dev/null
写在配置文件里省心,如果你不嫌麻烦,可以在ssh连接时以选项方式设置:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p端口 用户名@主机IP
不管写配置文件还是选项传递参数,今后使用都不会再出现主机公钥改变的警告,太棒了!
注意:非特殊情形请不要使用这两个参数,可能会带来严重的安全风险!