重新生成SSH服务器端密钥方法
重新生成SSH服务器端密钥方法
重新生成SSH服务器端密钥方法
理论上来说,每次安装服务器时SSH密钥(SSH Host Key)都是自动生成的,而生成出相同密钥的概率接近于0,这样避免了中间攻击等情况。但是,就是存在以下情况使得两台SSH密钥相同:
- 在虚拟化技术中克隆了一台虚拟机;
- 将原来的虚拟硬盘复制后新建虚拟机运行。
当然还有其他更加坑爹的情况,比如Kaijia碰到的VPS云服务器重装系统复制完模板数据后不重新生成SSH密钥的(某国内主流云提供商……),于是整个云平台所有的VPS都跑着相同的SSH密钥,如果要实现中间攻击只需要新建一台云就能获得私钥了。正是因为碰到了这种云主机,Kaijia研究了一下如何重新生成SSH服务器端密钥。
重设SSH密钥方法比较简单,首先第一步是要删除现有的密钥,在/etc/ssh/目录中存放了所有以ssh_host_开头的私钥和公钥文件,运行以下命令删除这些密钥:
rm /etc/ssh/ssh_host_*
接下来便是重新生成密钥,在Debian/Ubuntu系统中,可以使用dpkg命令重新配置SSH服务器包实现密钥的生成:
dpkg-reconfigure openssh-server
生成之后需要重启SSH服务使新的密钥生效:
service ssh restart
而在CentOS系统中,这个操作则变得更加简单,只需要重启SSH服务,SSH服务便会在启动载入密钥时自动生成新的密钥:
service sshd restart
在重启系统等情况下,只要发现密钥不存在,CentOS系统都可以自动生成密钥。
另外,值得提醒的是,更新后的SSH公钥和你的电脑中记录的公钥不同,因此在下一次登录SSH时,肯定会收到一下警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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 a host key has just been changed. The fingerprint for
the ECDSA key sent by the remote host is
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00. Please contact your
system administrator. Add correct host key in
/home/kaijia/.ssh/known_hosts to get rid of this message. Offending
ECDSA key in /home/kaijia/.ssh/known_hosts:0 remove with: ssh-keygen
-f “/home/fkj/.ssh/known_hosts” -R [kaijia.me] ECDSA host key for [kaijia.me] has changed and you have requested strict checking. Host
key verification failed.
此时,只需要按照提示执行其中的ssh-keygen命令即可取消对原先密钥的信任,然后再次连接SSH便会提示有新密钥了。当然,虽然不推荐,简单粗暴地直接删除known_hosts文件:
rm ~/.ssh/known_hosts
也是可以的。