概述
主要是实现批量检查一下服务器的用户和密码是否正确. 有很多服务器,账号,端口,密码都有集中组合. 如何实现快速检查密码.
- 利用python的paramiko可以实现ssh连接,甚至交互式命令
- 利用多线程迅速进行扫描
- 后续还可以结合修改密码去设新的密码. 设成定时任务.
- 实际上主机列表要接cmdb或者ansible的host,检查到可以筛选出来,用ansible-play批量修改。
#!/usr/bin/env python3
import sys
import getpass
import paramiko
import threading
import os
#多线程扫描服务器的root密码,输出列表.
#创建函数实现远程连接主机、服务器密码以及在远程主机上执行的命令的功能
def remote_comm(host,port,user,pwd, command):
#创建用于连接ssh服务器的实例
ssh = paramiko.SSHClient()
#print("now,we run %s %d %s %s"%(host,port,user,command))
#设置自动添加主机密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接ssh服务器,添加连接的主机、用户名、密码填好,捕获异常,有异常则跳出函数
try:
ssh.connect(hostname=host,port=port,username=user,password=pwd)
# 在ssh服务器上执行指定命令,返回3项类文件对象,分别是,输入、输出、错误
try:
stdin, stdout, stderr = ssh.exec_command(command)
# 读取输出
out = stdout.read()
# 读取错误
error = stderr.read()
# 如果有输出
if out:
# 打印主机输出内容
print("%s %d %s SDF%s23sawe 密码正确" % (host, port,user,pwd))
#print('[%s] OUT:\n%s' % (host, out.decode('utf8')))
# 如果有错误
if error:
# 打印主机错误信息
print('[%s] ERROR:\n%s' % (host, error.decode('utf8')))
# 程序结束
ssh.close()
except:
#print("%s %d %s %s 连接得上,命令返回错误"%(host,port,user,pwd))
pass
except:
#print("%s %d %s %s ssh这个用户连接不上"%(host,port,user,pwd))
return
if __name__ == '__main__':
#实际上一般读取数据库或者文本文件或者ip列表
ips = ["192.168.11.79", "192.168.12.12","10.10.17.200","10.10.17.201","10.10.17.202"]
portlist = [22, 2016]
userlist = ["root", "wx"]
passwdlist = ["PSDKFLsdwewf", "123.com.com"]
command = "df"
for pwd in passwdlist:
for user in userlist:
for port in portlist:
for ip in ips:
#将读取到的ip地址作为remote_comm函数实际参数传递给函数,ips中有几个ip地址循环几次
#创建多线程
t = threading.Thread(target=remote_comm, args=(ip,port,user,pwd,command))
#启用多线程
t.start()