python paramiko利用sftb上传文件到远程

import paramiko
import os
class Linux(object):
  # 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机
  def __init__(self, ip, username, password, timeout=30):
    self.ip = ip
    self.username = username
    self.password = password
    self.timeout = timeout
    # transport和chanel
    self.t = ‘‘
    self.chan = ‘‘
    # 链接失败的重试次数
    self.try_times = 3

  # 调用该方法连接远程主机
  def connect(self):
    pass

  # 断开连接
  def close(self):
    pass

  # 发送要执行的命令
  def send(self, cmd):
    pass

  # get单个文件
  def sftp_get(self, remotefile, localfile):
    t = paramiko.Transport(sock=(self.ip, 22))
    t.connect(username=self.username, password=self.password)
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.get(remotefile, localfile)
    t.close()

  # put单个文件
  def sftp_put(self, localfile, remotefile):
    t = paramiko.Transport(sock=(self.ip, 22))
    t.connect(username=self.username, password=self.password)
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put(localfile, remotefile)
    t.close()

  # ------获取本地指定目录及其子目录下的所有文件------
  def __get_all_files_in_local_dir(self, local_dir):
    # 保存所有文件的列表
    all_files = list()
    # 获取当前指定目录下的所有目录及文件,包含属性值
    files = os.listdir(local_dir)
    for x in files:
      # local_dir目录中每一个文件或目录的完整路径
      filename = os.path.join(local_dir, x)
      # 如果是目录,则递归处理该目录
      if os.path.isdir(x):
        all_files.extend(self.__get_all_files_in_local_dir(filename))
      else:
        all_files.append(filename)
    return all_files

  def sftp_put_dir(self, local_dir, remote_dir):
    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(self.ip, port=22, username=self.username, password=self.password)
    stdin, stdout, stderr = ssh.exec_command("cd /home/zmm/SNWA_space/ad_world/media;mkdir {}".format("aaa/bbb"))
    print stdout.readlines()
    ssh.close()
    t = paramiko.Transport(sock=(self.ip, 22))

    t.connect(username=self.username, password=self.password)
    ssh = paramiko.SSHClient()

    sftp = paramiko.SFTPClient.from_transport(t)
    # 去掉路径字符穿最后的字符‘/‘,如果有的话
    if remote_dir[-1] == ‘/‘:
      remote_dir = remote_dir[0:-1]
    # 获取本地指定目录及其子目录下的所有文件
    all_files = self.__get_all_files_in_local_dir(local_dir)
    # 依次put每一个文件
    for x in all_files:
      filename = os.path.split(x)[-1]
      remote_filename = remote_dir + ‘/‘ + filename
      print u‘Put文件%s传输中...‘ % filename
      sftp.put(x, remote_filename)

if __name__ == ‘__main__‘:
  remote_path = r‘/home/zmm/SNWA_space/‘
  local_path = r‘hitb-ams2018/data.yml‘

  host = Linux(‘192.168.1.201‘, ‘zmm‘, ‘zhangmiaomiao‘)

  # 将远端remote_path目录中的所有文件get到本地local_path目录
  # host.sftp_get_dir(remote_path, local_path)
  # # 将本地local_path目录中的所有文件put到远端remote_path目录
  host.sftp_put_dir(remote_path, local_path)

原文地址:https://www.cnblogs.com/zamo-7/p/9517710.html

时间: 2024-10-17 03:51:03

python paramiko利用sftb上传文件到远程的相关文章

利用put上传文件到服务器

#import "KUViewController.h" #import "KUProgress.h" @interfaceKUViewController ()<NSURLSessionTaskDelegate> //下载进度的类,继承UIview @property (weak, nonatomic) IBOutlet  KUProgress *progressView; @end @implementation KUViewController -

php 利用socket上传文件

php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51yip.com/php/673.html有兴趣的朋友可以看看,前面讲的那篇博文,socket的服务器和客户端都是要用php命令来运行的.平常我们上传文件是浏览本地文件,通过一个php程序将文件上传一个地方,这个时候我们用php命令来运行php程序就不方便了.这个时候我们可以用fsockopen来打开

Python模拟HTTP Post上传文件

使用urllib2模块构造http post数据结构,提交有文件的表单(multipart/form-data),本示例提交的post表单带有两个参数及一张图片,代码如下: #buld post body data boundary = '----------%s' % hex(int(time.time() * 1000)) data = [] data.append('--%s' % boundary) data.append('Content-Disposition: form-data;

C# 上传文件至远程服务器

C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28|  分类: C#|举报|字号 订阅 最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传到远程服务器上面. 注意,我在这里使用的是WebClient而不是ftp 首先,我们先来定义一个类UpLoadFile,这个类就是文件上传类.代码如下: public void UpLoadFile(string fileNamePath, string uriString, bool IsAutoRena

shell中利用ftp 上传文件夹功能

我们知道ftp 只能用来上传或者下载文件,一次单个或者多个,怎么实现将文件夹的上传和下载呢? 可以利用先在remote ip上建立一个相同的文件夹目录,然后将文件放到各自的目录中去 1.循环遍历出要上传的文件夹中的文件夹目录 2.遍历出每个文件夹下的文件 3.逐一上传文件 ftp 命令 图中有众多的交互,我们不想让他显示这些交互 可以使用参数 屏蔽掉 ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer

利用Struts上传文件

在利用struts2完成上传文件到服务器时,遇到获取不到文件名 原因是在Action中的属性名没有和jsp中的属性名匹配 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"

python使用post方式上传文件

前言:由于项目需求做的接口测试有上传文件这一要求,在查资料时候发现用requests来做上传文件很简单,所以下了这个库来完成.后续有时候会看看能不能用传统地urllib2来做. 首先你要有个requests: https://github.com/kennethreitz/requests 然后把它import进来 接着: def post(self,url,param_dict,param_header,file = '',param_type = 'x-www-form-urlencode'

springmvc利用jqueryupload上传文件,后台处理方法

public void importIdentifySchemeFile(Integer id,Integer type,HttpServletRequest request, HttpServletResponse response){ PrintWriter out = null;          try {              //初始化变量              InputStream stream = null;              String ret_fileNa

利用 git 上传文件到 github

git 常用命令汇总 git config --global user.name "" git config -- global user.email "" git config --list  (查看配置详情) git status   (查看当前仓库状态) git add   (将工作区中的文件添加到暂存区) git commit -m"description"   (将暂存区的文件提交到本地仓库,-m 后添加的是对文件的注释或解释说明) g