paramiko支持SSH协议,可以与Linux或Windows(搭建了SSH服务)进行交互,包括远程执行命令或执行上传/下载文件等操作。
代码如下:
import os import paramiko def exec_command(ip, port, username, password, cmd): """远程执行命令 """ paramiko.util.log_to_file("paramiko.log") ssh = paramiko.SSHClient() ssh.load_system_host_keys() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=ip, port=int( port), username=username, password=password, timeout=5) stdin, stdout, stderr = ssh.exec_command('cmd.exe /C "%s"' % cmd) ssh.close() def upload_file(ip, port, username, password, local_file_path, remote_file_path): """上传文件 """ paramiko.util.log_to_file("paramiko.log") trans = paramiko.Transport((ip, int(port))) trans.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(trans) sftp.put(local_file_path, remote_file_path) trans.close() def download_file(ip, port, username, password, local_file_path, remote_file_path): """下载文件 """ paramiko.util.log_to_file("paramiko.log") trans = paramiko.Transport((ip, int(port))) trans.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(trans) sftp.get(remote_file_path, local_file_path) trans.close() def upload_dir(ip, port, username, password, local_dir, remote_dir): """上传目录(从windows上传) """ paramiko.util.log_to_file("paramiko.log") trans = paramiko.Transport((ip, int(port))) trans.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(trans) try: sftp.mkdir(remote_dir) except Exception, e: pass for root, dirs, files in os.walk(local_dir): for file_name in files: local_file_path = os.path.join(root, file_name) remote_file_path = os.path.join( remote_dir, local_file_path[3:]) # 切片:windows路径去掉盘符 remote_file_path = remote_file_path.replace("\\", "/") try: sftp.put(local_file_path, remote_file_path) except Exception, e: sftp.mkdir(os.path.dirname(remote_file_path)) sftp.put(local_file_path, remote_file_path) for dir_name in dirs: local_dir = os.path.join(root, dir_name) remote_path = os.path.join(remote_dir, local_dir[3:]) remote_path = remote_path.replace("\\", "/") try: sftp.mkdir(os.path.dirname(remote_path)) sftp.mkdir(remote_path) except Exception, e: pass trans.close()