python 多線程ssh檢查服務(wù)器密碼

概述

主要是實(shí)現(xiàn)批量檢查一下服務(wù)器的用戶和密碼是否正確. 有很多服務(wù)器,賬號(hào),端口,密碼都有集中組合. 如何實(shí)現(xiàn)快速檢查密碼.

  1. 利用python的paramiko可以實(shí)現(xiàn)ssh連接,甚至交互式命令
  2. 利用多線程迅速進(jìn)行掃描
  3. 后續(xù)還可以結(jié)合修改密碼去設(shè)新的密碼. 設(shè)成定時(shí)任務(wù).
  4. 實(shí)際上主機(jī)列表要接cmdb或者ansible的host,檢查到可以篩選出來(lái),用ansible-play批量修改。
#!/usr/bin/env python3
import sys
import getpass
import paramiko
import threading
import os

#多線程掃描服務(wù)器的root密碼,輸出列表.

#創(chuàng)建函數(shù)實(shí)現(xiàn)遠(yuǎn)程連接主機(jī)、服務(wù)器密碼以及在遠(yuǎn)程主機(jī)上執(zhí)行的命令的功能
def remote_comm(host,port,user,pwd, command):
#創(chuàng)建用于連接ssh服務(wù)器的實(shí)例
    ssh = paramiko.SSHClient()
    #print("now,we run %s %d %s %s"%(host,port,user,command))
#設(shè)置自動(dòng)添加主機(jī)密鑰
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#連接ssh服務(wù)器,添加連接的主機(jī)、用戶名、密碼填好,捕獲異常,有異常則跳出函數(shù)
    try:
        ssh.connect(hostname=host,port=port,username=user,password=pwd)
        # 在ssh服務(wù)器上執(zhí)行指定命令,返回3項(xiàng)類(lèi)文件對(duì)象,分別是,輸入、輸出、錯(cuò)誤
        try:
            stdin, stdout, stderr = ssh.exec_command(command)
            # 讀取輸出
            out = stdout.read()
            # 讀取錯(cuò)誤
            error = stderr.read()
            # 如果有輸出
            if out:
                # 打印主機(jī)輸出內(nèi)容
                print("%s %d %s SDF%s23sawe  密碼正確" % (host, port,user,pwd))
                #print('[%s] OUT:\n%s' % (host, out.decode('utf8')))
            # 如果有錯(cuò)誤
            if error:
                # 打印主機(jī)錯(cuò)誤信息
                print('[%s] ERROR:\n%s' % (host, error.decode('utf8')))
            # 程序結(jié)束
            ssh.close()
        except:
            #print("%s %d %s %s   連接得上,命令返回錯(cuò)誤"%(host,port,user,pwd))
            pass

    except:
        #print("%s %d  %s  %s   ssh這個(gè)用戶連接不上"%(host,port,user,pwd))
        return

if __name__ == '__main__':
    #實(shí)際上一般讀取數(shù)據(jù)庫(kù)或者文本文件或者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函數(shù)實(shí)際參數(shù)傳遞給函數(shù),ips中有幾個(gè)ip地址循環(huán)幾次
                #創(chuàng)建多線程
                    t = threading.Thread(target=remote_comm, args=(ip,port,user,pwd,command))
                    #啟用多線程
                    t.start()


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容