本文共 3293 字,大约阅读时间需要 10 分钟。
一、背景
根据安全要求,计算的密码不能长期不变,需要3-4个月更换一次用户的密码,而当集群内主机的数量只有10台或者20台,手动一台一台的修改,工作量还能接受,而当集群主机到达200,甚至300台的时候,单台主机手动修改就会消耗大量的工作时间,增加工作成本。而使用脚本就会显得尤为的方便快捷,以及减少错误。
二、准备工作
1. 集群内的主机已经配置好ssh互信
2. 修改密码脚本(expect模块)
|
|
|
例如: source deploy.sh /home/hadoo/test.txt ~ all
4 主节点批量运行修改密码脚本的shell脚本
|
三、执行过程
1首先在172.20.54.21的/hadoop/deploy.conf里配置需要修改密码的主机的列表。
2使用/hadoop/deploy.sh脚本将ch_ocdc_passwd.sh分发到ocdc的用户主目录下:
命令 source /hadoop/deploy.sh /home/ocdc/ch_ocdc_passwd.sh ~ all
3运行批量修改脚本ch_all_host_passwd.sh
四 、 报错原因分析
1. 报错内容:
spawnpasswd
OldPassword:
passwd: User not known to the underlying authentication module
passwd:password unchanged
send:spawn id exp5 not open
while executing
"send"Info#0124\r""
(file "/home/ocdc/ch_ocdc_passwd.sh" line 6)
分析:主要是脚本里输入旧密码值与原来的密码值不匹配,即你输入的原密码是错误的,操作系统不允许你修改密码。
解决方案:
1. 找到正确的旧密码
2. 使用root账户或者ocdc的sudo权限去改密码。
2. 报错内容
spawnpasswd
OldPassword:
Newpassword:
Retypenew password:
Sorry, passwords do not match.
分析:此时旧密码是正确的,但是你的新密码的两次输入不一致,无法修改。
解决方案:
重新编辑你的脚本,把第一次新密码的值复制,然后粘贴在第二次输入新密码的位置,保证两次输入的新密码是一致的。
3. 报错内容:
spawnpasswd
OldPassword:
Newpassword:
Retypenew password:
Less than 8 days since the last change.
passwd:User not known to the underlying authentication module
passwd:password unchanged
分析:距离上一次修改本机的密码时长未超过8天,暂时不能修改。
解决方案:
记录下未所有这些同样错误的主机的列表,等待修改密码时长超过8天之后,再使用批量修改脚本对这一批主机进行批量修改密码操作。
五 、其他工具
本文档内的操作方式主要是基予Linux操作系统自带的except这个实现shell非交互式操作的模块,而目前业界在自动运维方面还要很多好用的工具,例如Puppet、Saltstack、ansible.
个人感觉ansible更加好用,主要是其相对于Puppet以及Saltstack更加轻量级,并且无需在需要进行操作的主机上安装客户端(因为在每台主机上安装客户端本身就是非常大的工作量),只需要在主节点上安装ansible命令行工具,即可把需要的命名通过ssh互信推送到需要执行的主机上去即可。
转载地址:http://uvxthz.baihongyu.com/