AP计算机科学A(APcomputer science A)复习备考攻略视频教程
42775 人在学
根据ip列表按顺序执行,缺点是如果命令耗时长,主机很多的话,执行效率较慢
# -*- encoding: utf-8 -*- import paramiko import traceback def ssh(sys_ip, username, password, cmds): try: # 创建ssh客户端 client = paramiko.SSHClient() # 第一次ssh远程时会提示输入yes或者no client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 密码方式远程连接 client.connect(sys_ip, 22, username=username, password=password, timeout=5) # 互信方式远程连接 # key_file = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa") # ssh.connect(sys_ip, 22, username=username, pkey=key_file, timeout=20) # 执行命令 stdin, stdout, stderr = client.exec_command(cmds) # 获取命令执行结果,返回的数据是一个list result = stdout.readlines() if len(result)>0: return sys_ip + ":" + str(result[0]) else: return sys_ip + ":" + "none" except Exception, e: print sys_ip+" error:"+str(e) print traceback.format_exc() finally: client.close() if __name__ == "__main__": IPS='''10.198.1.1 10.198.1.2 10.198.1.3 10.198.1.4 10.198.1.5 10.198.1.6 10.198.1.7 10.198.1.8 10.198.1.9 ''' #根据\\n分割ip ip_list = ips.split("\\n") username = "test"#主机用户名 password = "test"#主机密码 cmds = "pwd"#需要执行的命令 for ip in ip_list: ssh(ip, username, password, cmds)
同步执行如果机器太多耗时长,效率就比较低,就可以使用异步方法同时执行,缺点是如果同时执行太多程序会有问题,所以加了sleep。
# -*- encoding: utf-8 -*- import time import paramiko import traceback from threading import Thread def async(f): def wrapper(*args, **kwargs): thr = Thread(target=f, args=args, kwargs=kwargs) thr.start() return wrapper @async def ssh(sys_ip, username, password, cmds): try: # 创建ssh客户端 client = paramiko.SSHClient() # 第一次ssh远程时会提示输入yes或者no client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 密码方式远程连接 client.connect(sys_ip, 22, username=username, password=password, timeout=5) # 互信方式远程连接 # key_file = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa") # ssh.connect(sys_ip, 22, username=username, pkey=key_file, timeout=20) # 执行命令 stdin, stdout, stderr = client.exec_command(cmds,timeout=30) # 获取命令执行结果,返回的数据是一个list result = stdout.readlines() if len(result)>0: print sys_ip + ":" + str(result[0]) else: print sys_ip + ":" + "none"+"\\n" except Exception, e: print sys_ip+" error:"+str(e)+"\\n" print traceback.format_exc() finally: client.close() if __name__ == "__main__": ips='''10.198.1.1 10.198.1.2 10.198.1.3 10.198.1.4 10.198.1.5 10.198.1.6 10.198.1.7 10.198.1.8 10.198.1.9 ''' #根据\\n分割ip ip_list = ips.split("\\n") username = "test"#主机用户名 password = "test"#主机密码 cmds = "pwd"#需要执行的命令 while (True): ipl = ip_list[0:5]#每次拿五个 for ip in ipl: ssh(ip, username, password, cmds) time.sleep(3) del ip_list[0:5]#删除5个 if len(ip_list) == 0: break#如果没了退出