python通过sftp远程传输文件

SFTP( SSH File Transfer Protocol)是一数据流连接,提供文件访问、传输和管理功能的网络传输协议。
在Python中,paramiko是实现ssh2协议的一个模块。在服务器上基本都是使用ssh远程,如果我们需要传输文件,也可以直接使用基于ssh服务的sftp传输,不需要另外开启文件传输的服务。
paramiko的sftp只能拷贝文件,不能拷贝文件夹。要实现文件夹的拷贝,可以使用深度搜索遍历源目录,若是文件,直接拷贝到目的目录;若是文件夹,则先在目的目录建立一个子目录,然后遍历子目录...使用递归函数,可以达到完全拷贝目录的目的。

代码如下:

import paramiko                                                        

host="xxx"                                          
username, password="xxx", "***"           
# 建立连接,获取sftp句柄
try:
  transport = paramiko.Transport((host, port))
  transport.connect(None, username=username, password=password)
  sftp = paramiko.SFTPClient.from_transport(transport)
  # sftp.listdir() 
  # sftp.listdir('./dir') 
  sftp.put(localpath, remotepath)  #上传本地文件到服务器
  transport.close()

except Exception as e:
  print(e)

get方法下载

# remotepath:需要下载的远程文件
# localpath:本地存储路径
# callback:获取接收与总传输字节数
get(remotepath,  localpath,  callback=None)

eg:

sftp.get(remotepath="/tmp/123.txt",localpath="/tmp/123.txt")

put方法上传

# localpath:上传源文件的本地路径
# remotepath:目标路径
# callback:获取接收与总传输字节数
# confirm:上传完毕后是否调用stat()方法,以便确认文件大小
put(localpath,remotepath,callback=None,confirm=True)

eg:

sftp.put(localpath="/tmp/123.txt",remotepath="/tmp/123.txt")

mkdir方法创建目录

# path:远程路径
# mode:默认是8进制的777,但是在系统上一般是以umask为准,这个被忽略。如果强制设置mode,则umask会被屏蔽。
mkdir(path, mode=o777)

删除操作

rmdir(path)   # 删除目录
remove(path)   # 删除文件

rename方法重命名

rename(oldpath,newpath)

查看文件或者目录信息

stat(path)  # 获取文件信息
listdir(path) # 获取目录列表

切换、查看目录

getcwd()   # 查看当前所在目录
chdir(path)  # 切换当前目录

修改文件或者目录的权限、用户组

chmod(path , mode)   # 修改目录或者文件权限
chown(path,uid ,gid)   # 修改目录或者文件的用户组

你可能感兴趣的:(python通过sftp远程传输文件)