# coding:utf-8 import paramiko from threading import Thread class TypeError(Exception): pass class Linux(object): def __init__(self, host, username, password, remotePath=None, localPath=None, _shell=None, Type=None, port=22): self._host = host self._port = port self._username = username self._password = password self._remotePath = remotePath self._localPath = localPath self._shell = _shell self._type = Type def ssh(self): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(self._host, self._port, self._username, self._password, timeout=2) stdin, stdout, stderr = ssh.exec_command(self._shell) return stdout.read() except Exception: pass finally: ssh.close() def sftp(self): trans = paramiko.Transport((self._host, self._port)) try: trans.connect(username=self._username, password=self._password) sftp_client = paramiko.SFTPClient.from_transport(trans) if self._type == "upload": sftp_client.put(self._localPath, self._remotePath) elif self._type == "download": sftp_client.get(self._remotePath, self._localPath) else: raise TypeError except TypeError: print("sftp not support this %s type" % (self._type)) except Exception: pass finally: trans.close() class Linux_Execute(threading.Thread): def __init__(self, host): super(Linux_Execute, self).__init__() self._host = host def run(self): linux = Linux(host=self._host, user=USERNAME, password=PASSWORD, _shell=_SHELL) print linux.ssh() SERVER_LIST = ["salt-master", "salt-minion", "salt-test"] USERNAME = "root" PASSWORD = "root" _SHELL = "uptime" if __name__ == "__main__": threads = [] for host in SERVER_LIST: threads.append(Linux_Execute(host)) for threadobj in threads: threadobj.start() for threadobj in threads: threadobj.join() print("Over")