python 多线程ssh检查服务器密码

2020-10-23  本文已影响0人  随便写点什么就好

概述

主要是实现批量检查一下服务器的用户和密码是否正确. 有很多服务器,账号,端口,密码都有集中组合. 如何实现快速检查密码.

  1. 利用python的paramiko可以实现ssh连接,甚至交互式命令
  2. 利用多线程迅速进行扫描
  3. 后续还可以结合修改密码去设新的密码. 设成定时任务.
  4. 实际上主机列表要接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()


image.png
上一篇 下一篇

猜你喜欢

热点阅读