1、本地文件为Windows服务器文件,远程为linux服务器
2、可批量操作多台服务器,多个文件
#-*- coding:utf-8 -*- import paramiko import os import traceback class SSH(object): def __init__(self, ip, passwordlist, username): self.ip = ip self.username = username self.passwordlist = passwordlist def connect_ssh(self): for passwd in self.passwordlist: try: self.ssh = paramiko.SSHClient() self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.ssh.connect(hostname=self.ip, port=22, username=self.username, password=passwd) break except Exception as e: print (self.ip, e) def execute_cmd(self, cmd): #多条命令之间以逗号隔开 stdin, stdout, stderr = self.ssh.exec_command(cmd) res, err = stdout.read(), stderr.read() result = res if res else err return result.decode() def ssh_close(self): self.ssh.close() def sftp_connect(self): for passwd in self.passwordlist: try: self.t = paramiko.Transport((ip, 22)) self.t.connect(username=username, password=passwd) self.sftp = paramiko.SFTPClient.from_transport(self.t) except Exception as e: print (self.ip, e) def sftp_close(self): self.t.close() def get_localfile(self, local_dir): allfiles = list() for filepath, dirs, files in os.walk(local_dir, topdown=True): for file in files: filename = os.path.join(filepath, file) allfiles.append(filename) return allfiles def sfpt_putfile(self, local_dir, remote_dir): try: if remote_dir[-1] != '/': remote_dir = remote_dir + "/" all_files = self.get_localfile(local_dir) for file in all_files: file1 = os.path.basename(file) remote_filename = os.path.join(remote_dir, file1) print (remote_filename) try: self.sftp.stat(remote_path) except: print ("远程服务器无文件夹,请先创建...") self.sftp.put(file, remote_filename) except: print(traceback.format_exc()) if __name__ == '__main__': hostipfile = "xxx" (Linux服务器IP文件) username = "xxx" (登陆服务器用户名) passwordlist = ["XXX", "XXX"] (登陆服务器密码列表) local_dir = "XXX" (本地Windows服务器文件夹名) remote_dir = "XXX" (远程Linux服务器文件夹名) with open (hostipfile) as f: for ips in f: ip = ips.replace(' ', '').strip() ssh = SSH(ip, passwordlist, username) ssh.connect_ssh() print (ip, ssh.execute_cmd('ls /opt')) ssh.sftp_connect() ssh.sfpt_putfile(local_dir, remote_dir) ssh.ssh_close() ssh.sftp_close()