前言:

由于线上服务器密码长久没有更新,现领导要求批量更换密码。线上的之前部署过salt,但由于各种因素没有正常使用。

使用自动化工具批量修改的计划搁浅了,后来领导给了个python多线程修改密码脚本。但实际测试效果并不理想,会出现卡住情况

#!/usr/bin/python
import paramiko#ssh连接模块
import time,sys,re,os
import socket
import threading,Queue#线程模块 root_cmd = r'''
这里输入你要执行的命令
'''
user_cmd = r''' echo '' '''
issu = 1
root_pwd='你要修改的root密码'
login_user = '普通用户名'
key_file = '/home/.ssh/id_rsa'#普通用户key
sshport = 22#端口
time_out = 60 #超时时间
Numer_Thread = 300#最大线程数(根据主机数量修改) q = Queue.Queue()#线程队列
socket.setdefaulttimeout(time_out)
lock = threading.RLock()#线程锁(同时只允许一个线程执行动作)
onlydir = dir() def sshgo(host,rootuser,rootpwd):
rtn = []
key = paramiko.RSAKey.from_private_key_file(key_file)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys() rtn.append('________________________________%s'%host)
try:
ssh.connect(host,sshport,login_user,pkey=key)
except Exception,e:
rtn.append('%s__ERROR_________________________%s'%(e,host))
return rtn
if 'user_cmd' in onlydir:
stdin, stdout, stderr = ssh.exec_command('LANG=en_US.UTF-8;LANGUAGE=en_US.UTF-8; %s'%user_cmd)
rtn.append(stdout.read() + stdout.read())
#rtn.append(stdout.read() + stderr.read())
if not issu:
#return rtn
return "",(rtn)
shell = ssh.invoke_shell()
while not shell.recv(4096).endswith(']$ '):
time.sleep(0.1) buff =''
shell.send('LANG=en_US.UTF-8;LANGUAGE=en_US.UTF-8;su - %s'%rootuser)
shell.send('\n')
while not buff.endswith('Password: '):
time.sleep(0.1)
resp = shell.recv(4096)
buff += resp
if buff.endswith('exist') or buff.endswith(']$ '):
rtn.append('ERROR_SSH.RECV_____1________________%s'% resp)
return rtn
buff =''
shell.send(root_pwd)
shell.send('\n')
while not buff.endswith(']# '):
time.sleep(0.1)
resp = shell.recv(4096)
buff += resp
if buff.endswith('password') or buff.endswith(']$ '):
rtn.append('ERROR_SSH.RECV_____2________________%s'% resp)
return rtn
shell.send('LANG=en_US.UTF-8;LANGUAGE=en_US.UTF-8; %s '%root_cmd)
shell.send('\n')
buff = ''
while not buff.endswith(']# '):
time.sleep(0.1)
resp = shell.recv(4096)
buff += resp
if buff.endswith(']$ '):
rtn.append('ERROR_SSH.RECV_____3________________%s'% resp)
break
elif buff.endswith('? '):
rtn.append('ERROR_SSH.RECV_____4________________??')
break
#print buff
#rtn= (''.join(rtn)).strip()+" "+host
rtn.append('\n'.join(buff.split('\n')[1:-1]))
ssh.close()
return "",(rtn)
#return rtn def do_echo(host,rootuser,rootpwd):
result = sshgo(host,rootuser,rootpwd)
lock.acquire()
for pp in result:
print pp
print
sys.stdout.flush()
lock.release() def working():
while 1:
args = q.get()
do_echo(args[0],args[1],args[2])
q.task_done() for i in range (Numer_Thread):
t = threading.Thread(target=working)
t.setDaemon(1)
t.start()
print "Begin......"
fn = open("/var/tmp/169" ,"r")
#fn = open("/tmp/1.log" ,"r")
for i in fn:
if not re.match('#',i) and re.search('.',i):
c = i.split()
q_args = [c[0],'','']
#q_args = [c[0],c[1],c[2]]
q.put(q_args)
fn.close()
q.join()

python多线程修改root密码脚本

后来想到了不需要安装客户端的自动化管理工具:ansible 好吧那就查下相关资料吧

1.安装ansible

yum -y install ansible

2.修改主机配置文件

vim /etc/ansible/hosts
[web]#主机组
10.18.111.123 ansible_ssh_user=usernam ansible_ssh_private_key_file=/home/maintain/username/.ssh/id_rsa
192.168.1.1 ansible_become_pass='password' ansible_ssh_user=username  ansible_ssh_private_key_file=/home/maintain/username/.ssh/id_rsa

配置得了root密码,及普通用户和相应的key,这样做其实并不理想,1:不安全2:配置复杂点。后续可以使用ansible的playbook实现

2.切换普通用户执行命令

ansible web -S -R root -m raw -a 'echo '需要修改的root密码' | passwd --stdin root'

 

3.playbook版本

 

这脚本参照网上的脚本修改的,但没生效。期待大牛的完善。

参考链接:

http://zylhz.com/?p=107

ansible非root用户批量修改root密码的更多相关文章

  1. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  2. centos 7 下进入单用户模式修改root密码

    centos7进入单用户模式修改root用户密码 在工作中可能会遇到root密码忘记,那么这里就要进入单用户模式下了. 在重启电脑之后 时间:2015-05-13 10:42来源:blog.51cto ...

  3. 转Centos7.0进入单用户模式修改root密码

    Centos7.0进入单用户模式修改root密码   启动Centos7 ,按空格让其停留在如下界面. 按e进行编辑 在UTF-8后面输入init=/bin/sh 根据提示按ctrl+x 得如下图 输 ...

  4. 忘记root密码怎么办-单用户模式修改root密码

    忘记root密码怎么办-单用户模式修改root密码================================= 1,开机3秒内按下向下的方向键,目的是为了不让它进入系统,而是停留在开机界面. 2 ...

  5. 单用户模式修改root密码

    单用户模式修改root密码 1.进入引导菜单界面2.按e进入grub,在linux或linux16那行结尾加上 rw init=/bin/bash,按Ctrl+x或F103.进入bash-4.3# , ...

  6. 进入单用户模式修改root密码

    进入单用户模式修改root密码 1.进入引导菜单界面2.按e进入grub,在linux或linux16那行结尾加上 rw init=/bin/bash,按Ctrl+x或F103.进入bash-4.3# ...

  7. saltstack+python批量修改服务器密码

    saltstack安装:略过 python脚本修改密码: # -*- coding utf-8 -*- import socket import re import os import sys imp ...

  8. ubuntu首次给root用户设置密码和root用户登录设置

    1 ubuntu首次给root用户设置密码 给root用户设置密码输入命令sudo passwd,然后系统会让你输入密码,这时输入的密码就是root用户的密码了,设置完成之后就可以切换root用户登录 ...

  9. Ansible批量修改root密码

    0x01:首先做好免密登录 http://www.cnblogs.com/evlon/p/8094306.html 0x02:批量修改密码 ansible all -m raw -a "ec ...

随机推荐

  1. iOS10新特性

    1.Siri API 的开放自然是 iOS 10 SDK 中最激动人心也是亮眼的特性.Apple 加入了一套全新的框架 Intents.framework 来表示 Siri 获取并解析的结果. 在 i ...

  2. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  3. RPM包管理命令rpm

    RPM包管理器是Linux系统中最早的软件包管理软件之一,也是目前最流行的软件包管理器,许多发行版都使用RPM作为默认的软件包管理软件. RPM软件包名称格式: samba-client-3.0.33 ...

  4. trunk 的坑

    三层交换机A和三层交换机B之间原本配置有trunk口,如再用trunk连二层交换机会导致环路,网络不通.将L3 A和L3-B之间断开正常.

  5. 导出csv文件示例

    导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...

  6. ubifs概述

    UBIFS无排序区块图像文件系统(Unsorted Block Image File System, UBIFS)是用于固态存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一.真正开 ...

  7. Design Tic-Tac Toe

    Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assume the fol ...

  8. C++之路进阶codevs1242(布局)

    1242 布局 2005年USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold    <:section class="hbox" ...

  9. WebAPI使用多个xml文件生成帮助文档

    一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的xm ...

  10. 华盛顿大学 Programming Languages

    表达式三要素: 语法,类型和计算值.