博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于ssh互信的集群内主机密码批量修改
阅读量:17419 次
发布时间:2019-09-18

本文共 3293 字,大约阅读时间需要 10 分钟。

一、背景

根据安全要求,计算的密码不能长期不变,需要3-4个月更换一次用户的密码,而当集群内主机的数量只有10台或者20台,手动一台一台的修改,工作量还能接受,而当集群主机到达200,甚至300台的时候,单台主机手动修改就会消耗大量的工作时间,增加工作成本。而使用脚本就会显得尤为的方便快捷,以及减少错误。

二、准备工作

 

1. 集群内的主机已经配置好ssh互信

2. 修改密码脚本(expect模块)

#!/usr/bin/env expect

#等待--输入-等待--。。。。输入---结束

#向ssh客户端输入passwd值

spawn passwd

#期待客户端的回复提示为:"Old Password:"字符串

expect "Old Password:"

#向提示后的客户端发送"Asia%2266\r",即旧密码的值

send "Asia%2266\r"

#期待客户端的回复提示为:"New password:"字符串

expect "New password:"

#向提示后的客户端发送"Info#0124\r",即新密码的值

send "Info#0124\r"

#期待客户端的回复提示为:"Retype new password:"字符串,即再次输入新密码

expect "Retype new password:"

#向提示后的客户端发送"Info#0124\r",即新密码的值

send "Info#0124\r"

#结束

interact

3. 
scp 批量分发脚本
#!/bin/bash
#set -x


if [ $# -lt 3 ]
then
  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"
  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"                        
  exit
fi
src=$1
dest=$2
tag=$3
if [ 'a'$4'a' == 'aa' ]
then
  confFile=/hadoop/deployAll.conf #配置需要分发的主机的列表
else
  confFile=$4
fi

if [ -f $confFile ]
then
  if [ -f $src ]
  then
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`
    do
       echo "-----------------------------$server----------------------"
       scp $src $server":"${dest}
    done
  elif [ -d $src ]
  then
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`
    do
 scp -r$src $server":"${dest}
    done
  else
      echo "Error: No source file exist"
  fi


else
  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi
/hadoop/deployAll.conf 的内容:(这里节省篇幅,就用4台主机了)

HX-BATCH-DN-1,all,dn         
HX-BATCH-DN-2,all,dn           
HX-BATCH-DN-3,all,dn
HX-BATCH-DN-4,all,dn
分发命令:source deploy.sh   [ 需要发送的文件路径 ]  [目的主机路径]  all

例如: source deploy.sh /home/hadoo/test.txt  ~  all

4 主节点批量运行修改密码脚本的shell脚本

 

for m in {1..4}

do

 echo "_______________________gx-batch-dn-$m____________________________"

 ssh  gx-batch-dn-$m  sudo -s chmod  777   /home/ocdc/ch_ocdc_passwd.sh

        ssh  gx-batch-dn-$m   /home/ocdc/ch_ocdc_passwd.sh

        ssh  gx-batch-dn-$m   rm /home/ocdc/ch_ocdc_passwd.sh

 echo " "

done

三、执行过程

 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非交互式操作的模块,而目前业界在自动运维方面还要很多好用的工具,例如PuppetSaltstackansible.

 

个人感觉ansible更加好用,主要是其相对于Puppet以及Saltstack更加轻量级,并且无需在需要进行操作的主机上安装客户端(因为在每台主机上安装客户端本身就是非常大的工作量),只需要在主节点上安装ansible命令行工具,即可把需要的命名通过ssh互信推送到需要执行的主机上去即可。

转载地址:http://uvxthz.baihongyu.com/

你可能感兴趣的文章
mysql 2003错误 10055_MYSQL无法连接---提示10055错误
查看>>
mysql redis缓存层_redis实现缓存的两种方式
查看>>
git 改local branch名字_用Git管理Latex写论文的工作流程
查看>>
mysql索引篇_MySQL索引篇
查看>>
有至少一个用MySQL_Mysql有用的面试题
查看>>
mysql select同时update_MySQLSELECT同时UPDATE同一张表
查看>>
mysql删除后数据库没变化_mysql之delete删除记录后数据库大小不变
查看>>
net mysql start3534_MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题...
查看>>
pta两个有序链表的合并_7-1 两个有序链表序列的合并 (20分) --- 内存问题再叙
查看>>
python问题描述怎么写_python写文件有时候写不进去怎么办
查看>>
qpython3安装lxml_在python的lxml中使用xml目录?
查看>>
java 幂取模_快速幂取模算法
查看>>
java build path jre_java-如何在安装了jre 7后为Jre 6设置路径?
查看>>
java上传下载源码_javaweb简单实现文件上传与下载源代码
查看>>
java socket udp 广播_1.Java 的屏幕广播(基于UDP),2.多线程下载器
查看>>
java控制热敏打印机的例子.rar_stm32控制热敏打印机
查看>>
java clone equals_(原)java中对象复制、==、equals
查看>>
java滚动字幕实训报告_Java实习报告 (7000字).doc
查看>>
php7 memcached.exe,PHP7 下安装 memcache 和 memcached 扩展
查看>>
计算机二级java技巧,计算机二级报java难考吗
查看>>