功能:批量系统命令巡检
对象:操作系统 HP-UN Linux
方法:Python paramiko
实现关键脚本:
第一 登录系统信息:
#创建用户登陆信息,并且生产一个JSON 文件
def write_os_info():
path = os.path.dirname(__file__) + '/os_logon.json'
os_info = {'主机名':{'ip':'具体IP', 'pro':'登录系统的协议', 'port':'通过上面协议的端口号', 'user':'登录系统的用户', 'passwd':'登录系统的密码'}}
with open(path, "w+", encoding="utf-8") as wf:
# dumps 将数据转换成字符串
json.dump(os_info, wf)
print("写入文件完成...")
说明:我采用了明文进行,信息目录,也可以通过下面方面,通过密钥实现,感兴趣的可以尝试一下,有点事可以保护系统的用户名和密码;
#private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
第二 读取用户登录信息,通过上一步生产的JSON 文件,进行逐个系统信息读取
# 读取用户登陆信息
def get_os_result():
global g_tmp_ip
global g_tmp_port
global g_tmp_pro
global g_tmp_user
global g_tmp_passwd
path = os.path.dirname(__file__) + '/os_logon.json'
with open(path, "r+", encoding="utf-8") as rf:
os_info = json.load(rf)
#print(os_info)
print("读取文件完成...")
#print(os_info.items())
for keyValue in (os_info.keys()):
#print(os_info[keyValue])
nextValue = os_info[keyValue]
g_tmp_ip = nextValue['ip'].strip()
g_tmp_port = int(nextValue['port'].strip())
g_tmp_pro = nextValue['pro'].strip()
g_tmp_user = nextValue['user'].strip()
g_tmp_passwd = nextValue['passwd'].strip()
print("########HOSTNAME:",keyValue,",IP:",g_tmp_ip,",PROTOCOL:",g_tmp_pro,",LOGON USER:",g_tmp_user,"########")
#通过获取JSON 文件中用户登陆系统
get_os_info.get_os_dir(g_tmp_ip,g_tmp_pro, g_tmp_port, g_tmp_user, g_tmp_passwd)
time.sleep(3) #sleep 3 s 为了巡检的内容慢慢的输出
第三 获取系统的目录使用情况,首先通过系统类型分类,然后再进行不同系统的目录巡检:
#通过IP 协议 端口号 用户名 密码 登陆系统
def get_os_dir(ip,pro,port,user,passwd):
if pro == 'SSH':
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(ip, port, user, passwd)
#ssh.connect(hostname='', port=22, username='oracle', password='')
stdin, stdout, stderr = ssh.exec_command('/bin/uname')
result = stdout.read()
platformV = result.decode().strip()
plat_name = 'Linux'
#print(platformV)
if platformV == plat_name:
# 执行命令
stdin, stdout1, stderr = ssh.exec_command('df -h')
result1 = stdout1.read()
print(result1.decode())
# 获取命令结果
elif platformV == "HP-UX":
# 执行命令
stdin, stdout2, stderr = ssh.exec_command('bdf')
result2 = stdout2.read()
print(result2.decode())
# 获取命令结果
else:
print('对不起,该系统我们当前不支持')
# 关闭连接
ssh.close()
elif pro == 'TELNET':
print('hh')
else:
print('error')
第四 效果:
