早上來公司,收到這個消息,我的心是崩潰的。
“tim老師,測試服務器的遠程登錄密鑰失效了”,我問他,做了什么改動沒,得到的確切回復是“只是上傳了一些代碼”,再次詢問下,堅持只上傳了些代碼,言之鑿鑿。
這個問題可大了,
1. 就這個機器而言,沒有做任何事,“只是上傳了代碼”就導致用了兩年的密鑰不能用了,這個機器是着急用來搭建測試服務器的。這個測試服務器已經搭建了一個多星期了,之前一直說代碼沒准備好,現在又蹦出這個,真是幺蛾子啊。
2. 所有包括正式的服務器與測試服務器一共11台。要是所有的服務器都在某個時候出這個問題,我就干不下去了。
先連上去看看,顯示如下,
'' ssh -p 50000 -i pwawscn.pem ubuntu@54.223.xx.xxx '' ubuntu@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 ubuntu@54.223.xx.xxx
在網上稍微查了一些生成公鑰私鑰的文章。一般使用ssh-keygen生成id_rsa(私鑰)與id_rsa.pub(公鑰),私鑰要自己保存,公鑰要更改為系統識別的文件名authorized_keys置於.ssh下。
鑒於這個公鑰可以從其它機器copy過來可以看出,公鑰與密鑰的生成與具體的機器沒有關系,生成過程沒有使用與具體機器相關的信息。還有,這對密鑰是與具體的用戶相聯的。
另外,得考慮引進一個成熟的運維工具,准備快速地瀏覽一下ansible這個了。
