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

Posted zamo-7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)






































































以上是关于python paramiko利用sftb上传文件到远程的主要内容,如果未能解决你的问题,请参考以下文章

paramiko模块使用

python2 paramiko模块初试   连接 ssh_connect 上传 FTP_post

Python使用paramiko远程连接服务器及上传文件

Python Paramiko实现sftp文件上传下载以及远程执行命令

python paramiko 多线程批量执行指令及批量上传文件和目录

使用 ppk 文件上传 Paramiko sftp [重复]