早上来公司,收到这个消息,我的心是崩溃的。
“tim老师,测试服务器的远程登录密钥失效了”,我问他,做了什么改动没,得到的确切回复是“只是上传了一些代码”,再次询问下,坚持只上传了些代码,言之凿凿。
这个问题可大了,
1. 就这个机器而言,没有做任何事,“只是上传了代码”就导致用了两年的密钥不能用了,这个机器是着急用来搭建测试服务器的。这个测试服务器已经搭建了一个多星期了,之前一直说代码没准备好,现在又蹦出这个,真是幺蛾子啊。
2. 所有包括正式的服务器与测试服务器一共11台。要是所有的服务器都在某个时候出这个问题,我就干不下去了。
先连上去看看,显示如下,
‘‘ ssh -p 50000 -i pwawscn.pem [email protected]54.223.xx.xxx ‘‘ [email protected]54.223.xx.xxx‘s password:
之前配置用密钥登录,用了一年多时间了,不可能会跳出这个密码提示的。首先肯定怀疑是sshd-config被改了。查看,没问题,ssh配置是用key与password都可以登录。有点纳闷,我还开着password登录啊(时间一长,好久没摸了,自己记忆也模糊了),隐约记得最开始的时候是开过密码登录的,查了查之前的一个记满密码的文档,发现有一个用户名与密码,竟然登录上去了,大喜。
试着查找了一下两天之内修改的所有文件,但可能是因为文件太多,或者是因为权限的原因,没有找到有用的信息。
中午的时候提交给aws的技术支持后(我们的服务是在aws上),我再次询问了我的同事,他才告诉我他装了git,可能是因为git重新生成了密钥,将之前的给覆盖了。告诉我将git与代码装到一起了,不影响系统,应该不会有问题,的吧,我晕死了。
肯定就是出在这个公钥密钥上的了。问题是还能恢复成以前那对公/密钥吗?要不然就与其它机器不方便统一管理了,一些脚本也得重新改了。
下午在aws技术支持的帮助下,与其它连接正常的服务作比较后。确实发现了问题。
在home/ubuntu/.ssh下,正常机器上是下面文件:(两个文件)
authorized_keys known_hosts
而我在出问题的机器上是下面的文件:(三个文件)
id_rsa id_rsa.pub know_hosts
看时间,id_rsa 与 id_rsa.pub就是昨天晚上同事为git新生成的了。
aws同学给出的方案倒也是简单,直接从正常机器上将authorized_keys复制过来即可。先新建了一个备份文件夹,将不要的东西(包括git的key)都移进去,只留下两个文件(authorized_keys与known_hosts),即可,都不用重启服务了。用之前的命令就能直接访问了。
ssh -p 50000 -i pwawscn.pem [email protected]54.223.xx.xxx
在网上稍微查了一些生成公钥私钥的文章。一般使用ssh-keygen生成id_rsa(私钥)与id_rsa.pub(公钥),私钥要自己保存,公钥要更改为系统识别的文件名authorized_keys置于.ssh下。
鉴于这个公钥可以从其它机器copy过来可以看出,公钥与密钥的生成与具体的机器没有关系,生成过程没有使用与具体机器相关的信息。还有,这对密钥是与具体的用户相联的。
另外,得考虑引进一个成熟的运维工具,准备快速地浏览一下ansible这个了。