0. 概述
今天批量修改AWS 上的 Linux ec2 主机的密码,但是由于脚本写得不是很完善,以及在修改过程中手工干预了一些机器,结果导致其中一台机器的密码错乱,登录不上去。
虽然编写脚本对密码进行暴力枚举,但是,试了一中午还是没试出来,所以只能另辟蹊径。根据以往的经验,自然是新开实例,然后重启一台新的机器替上,但是,坑的是在这台机器的服务较多,有好几个,而且每个服务在其他机器上和负载均衡器上都配置的是IP,这就给更换主机带来了麻烦。
最终,为了保证服务的稳定,还是决定修改这台主机的密码。经过google(百度实在是找不到有价值的参考资料)多个案例,终于找到了修改的方法,整个过程较短,可以在 1~2 分钟内搞定。下面就介绍一下修改 ec2 实例密码的方法。
1. 卸载磁盘
磁盘在 aws 上的术语叫做 volume,我们可以简单得理解为我们平时使用的 PC 上的硬盘,可以方便得拆卸和添加。
在 ec2 console 上找到我们的实例:
关闭它:
然后再选中它,选择属性中的 “Description”,在 “Description” 标签页中找到这个实例挂载的 ebs 列表,然后选择 Root
device 这个卷。点击链接。
你会看到弹出一个窗口,点击这个窗口上 vol-xxxxx
的连接:
然后你就会跳到 volumns 列表,但是因为你是点击链接进来的,所以就只会看到一个卷,并且状态为 “in-use”的:
点击红色圈出来的 “Actions”,选择 “Detach Volume”
稍等片刻,你会发现这个卷的状态会改变成 “available” :
至此,我们就见这个卷卸载下来了。
2. 挂载磁盘
我们新建一台主机,只要是 linux ,什么发行版不重要,不过最好还是推荐使用和原来要修改密码的主机保持一致,主机型号可以随意,我一般都是选 “t2.micro”,然后将这个卷挂载到这个新主机上。
例如,我的新主机是:
找到我们刚才卸载下来的卷,选择 “Action” -> “Attach Volume”
然后你会看到一个弹出窗口,记得实例要选择我们新主机的实例,然后卷名按照我的来就可以了
点击 “Attach” 之后你会看到这个卷的状态就变成了 in-use
了。
3. 读取磁盘
此时,磁盘已经挂载到我们的新主机上,我们登录进新主机,然后使用命令:lsblk
你应该会看到有一个卷叫做 /dev/sdf
然后你需要切换到 root 用户执行以下命令
mkdir /mnt/recovery
mount /dev/sdf1 /mnt/recovery
chroot /mnt/recovery
cp /etc/default/passwd /dev/urandom
最后一句 “cp /etc/default/passwd /dev/urandom” 非常有必要,不加上的话里很可能会在后面的修改密码环节遇到以下错误:
# passwd
Changing password for root New password:
Reenter New Password:
Cannot open /dev/urandom for reading: No such file or directory
Cannot create salt for blowfish crypt
Error: Password NOT changed.
passwd: Authentication token manipulation error - See more at:
4. 修改密码
当你完成 步骤3 的时候,修改密码就和在原来主机上修改没什么区别了,直接执行以下命令即可:
(echo root用户的密码;sleep 1; echo root用户的密码)| passwd root
如果是修改其他用户的密码,只需要替换上面的密码和最后的 “root”,例如修改 Tyrael 用户的,那么命令是:
(echo password;sleep 1; echo password)| passwd Tyrael
执行完之后,用户密码已修改完成,此时按 Ctrl + D 退出 chroot
5. 从主机上卸载磁盘
修改完密码之后,并且确保按过一次Ctrl + D 之后, 只能按一次!!!执行以下命令:
cd /home
umount /mnt/recovery
6. 恢复主机
按照步骤 1 和 2 的操作,将磁盘从新主机上卸载下来,然后挂载到旧主机上,然后启动旧主机。你会发现,可以用刚才修改的密码登录了。