目录

重新生成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

也是可以的。