概述
主要是實(shí)現(xiàn)批量檢查一下服務(wù)器的用戶和密碼是否正確. 有很多服務(wù)器,賬號(hào),端口,密碼都有集中組合. 如何實(shí)現(xiàn)快速檢查密碼.
- 利用python的paramiko可以實(shí)現(xiàn)ssh連接,甚至交互式命令
- 利用多線程迅速進(jìn)行掃描
- 后續(xù)還可以結(jié)合修改密碼去設(shè)新的密碼. 設(shè)成定時(shí)任務(wù).
- 實(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