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) # 修改目录或者文件的用户组