本脚本通过python批量对Centos主机进行修改密码的操作,以主机的IP地址的第三四段合成密码。
需要注意,新密码中不能含有$符号,$在liunx是占位符。
如需使用,需要修改IP构造部分,返回语句检测,密码构造部分。
注意:请在大范围使用前进行小量测试!!!
#!/usr/bin/env python
# -*- coding:utf-8 -*-
##################################################新密码中不能含有 $ 符号##################################################
##################################################新密码中不能含有 $ 符号##################################################
##################################################新密码中不能含有 $ 符号##################################################
import paramiko
import time
# 建立SSH服务器的高级会话模式
ssh = paramiko.SSHClient()
# 允许连接不在known_hosts中的服务器
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
################################################
################## 构造IP地址####################
################################################
networkip = '192.168' #网段前半部分
networkip2 = '1' #网段!!!不可与前半段合并,此变量用于合成密码!!!
# 要处理的主机范围(x=1,y=3 即处理 1、2 两台)
x = 1
y = 255
################################################
################################################
################################################
#打开文件准备写入(最好提前创建)
fp=open('d:/test.txt','a')
#返回语句检测(即识别到该语句即为执行成功)
successful = "all authentication tokens updated successfully"
#开始处理
#在要处理的主机范围内开始循环
for clientip in range(x,y) :
#根据网段和主机合成数据
#合成IP地址
ipaddress = str(networkip)+str(networkip2)+"."+str(clientip)
###############################################################
#合成现有密码
#顺序密码合成
password = "Test@"+str(networkip2)+"."+str(clientip)
#统一现有密码
#password = 'Test@'
################################################################
#合成新密码
#顺序密码合成
#newpassword = "Test@"+str(networkip)+"."+str(clientip)
#统一密码
newpassword = 'Test@123'
##################################################新密码中不能含有 $ 符号##################################################
##################################################新密码中不能含有 $ 符号##################################################
##################################################新密码中不能含有 $ 符号##################################################
print("-------------------------------------------------------------------------------",file=fp)
print("正在处理...host:%s password:%s newpassword:%s "%(ipaddress,password,newpassword),file=fp)#输出正在处理的主机信息到日志
print("-------------------------------------------------------------------------------",file=fp)
try:
#尝试通过用户名及密码登陆服务器
ssh.connect(hostname=ipaddress, port=22, username='root', password=password,timeout=2)
stdin, stdout, stderr = ssh.exec_command('echo "%s" | passwd --stdin root'%newpassword) #单引号内为要执行的语句,不支持交互模式
#读取返回内容
fh = stdout.read()
fh = str(fh)
print ("执行结果:",file=fp)
try:
#返回语句检测,查询是否包含执行成功语句
print (fh[fh.index(successful):],file=fp)
#打印IP地址
print (ipaddress)
#打印返回语句
print (fh)
except:
#未检测到执行成功语句
print("host:%s,修改失败"%ipaddress,file=fp)
#打印错误信息
print (stderr)
#关闭SSH连接
ssh.close()
except:
#连接失败或密码错误
print("host:%s,连接失败"%ipaddress,file=fp)
#关闭文件写入
fp.close()



