#!/usr/bin/python# -*- coding:utf -*-import paramiko, osclass ParamikoTools(object): def __init__(self, ip, port, user, password=None, key=None, timeout=5): self.host = ip self.port = port self.user = user self.password = password self.key = key self.timeout = timeout def cmd(self, cmd): try: if self.key: k = paramiko.RSAKey.from_private_key_file(self.key) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=self.host, username=self.user, pkey=k, timeout=self.timeout) elif self.password: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=self.host, port=self.port, username=self.user, password=self.password, timeout=self.timeout) else: raise Exception(u"Lack of parameter!") stdin, stdout, stderr = ssh.exec_command(cmd) return stdout.read() ssh.close() except Exception, e: raise Exception ("%s exec command except:%s" % (self.host, e)) def download(self, localfile, remotefile): try: transport = paramiko.Transport((self.host, self.port)) transport.connect(username=self.user, password=self.password) sftp = paramiko.SFTPClient.from_transport(transport) sftp.get(remotefile, localfile) print "Download file fished:%s"%localfile transport.close() except Exception, e: raise Exception( "Download file from %s to local %s,%s" % (remotefile, localfile, e)) def upload(self, localfile, remotefile): try: transport = paramiko.Transport((self.host, self.port)) transport.connect(username=self.user, password=self.password) sftp = paramiko.SFTPClient.from_transport(transport) sftp.put(localfile, remotefile) print "Upload file fished:%s"%remotefile except Exception, e: raise Exception( "Upload local file to remote host execpt, localfile:%s-- remotedir:%s--except:%s" % ( localfile, remotefile, e))