问题描述:
要在做线上操作之前,尝试判断主机是否都是可以连接。
由于一次遍历所涉及到的主机数量比较多,所以采用多线程方式来实现!
1,python多线程探测ssh主机的代码:
import Queue, threading
import paramiko
class Worker(threading.Thread):
failhostlist = [] #表示失败的主机列表
def run(self):
while 1:
if self.q.qsize() == 0:break
host, sudo_user, sudo_pass = self.q.get() #从队列里面拿数据
self.pssh_action(host, sudo_user, sudo_pass) #干活的内容
self.q.task_done() #表示任务已完成了向队列发一个信号
return #干完活了就可以终止掉线程了return 退出
def pssh_action(self,host,sudo_user,sudo_pass):
s=paramiko.SSHClient()
s.load_system_host_keys()
try:
s.connect(hostname=host,username=sudo_user,password=sudo_pass,timeout=3)
s.close()
except Exception,e:
self.failhostlist.append(host)
return
2,调用示例: