版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiao3404/article/details/86563058
SFTP介绍
SFTP即Secure File Transfer Protocol,在paramiko模块中封装了sftp类,我们可以利用该类完成文件上传、下载、目录创建等多种功能,具体接口可以查看官网 http://docs.paramiko.org/en/2.4/api/sftp.html
创建SFTP会话
我们利用paramiko模块中的SSHClient类创建一个client对象后,我们可以用该client的open_sftp
接口创建一个新会话完成文件上传、下载等功能操作,其接口说明如下:
open_sftp( )
Open an SFTP session on the SSH server.
Returns:a new SFTPClient session object
文件上传
在SFTP类API中提供了诸如目录切换chdir、获取工作路径getcwd、目录创建mkdir、文件上传put、文件下载get等常见功能的接口。
举例如下:
try:
server_dir = '/root/paramiko/'
# SSHClient对象
client = ssh_client(ip, usr, password)
# 打开SFTP会话
sftp_client = client.open_sftp()
# 目录创建,目录存在时需要特殊特例,否则有异常
sftp_client.mkdir(server_dir)
#目录切换
sftp_client.chdir(server_dir)
# 文件上传 参数1 本地文件名称 参数2服务器文件名
sftp_client.put(__file__, '{}test.py'.format(server_dir))
# 会话关闭
sftp_client.close()
except Exception:
sys.exit(1)
为了在实际工程中便于使用和异常处理,将其封装成类,可以有效的处理异常情况,代码如下:
#! /usr/bin/env python
# *_* coding:utf-8 *_*
class CFileHelper(object):
"""
文件上下创建帮助类
"""
def __init__(self, client):
self.client = client
# return a new SFTPClient session object
self.sftp = client.open_sftp()
print('call init func')
def __del__(self):
"""
对象释放时自动关闭
:return:
"""
self.sftp.close()
print('call del func')
def upload(self, local_file, server_file):
try:
self.sftp.put(local_file, server_file)
except Exception:
print('upload file error')
def mkdir(self, server_dir):
try:
self.sftp.mkdir(server_dir)
except Exception :
# dir already exist
pass
def down(self, server_file, local_file):
try:
self.sftp.get(server_file, local_file)
except Exception:
print('down file error')
if __name__ == "__main__":
pass
代码使用如下:
try:
server_dir = '/root/paramiko/'
# SSHClient对象
client = ssh_client(ip, usr, password)
file_helper = CFileHelper(client)
file_helper.mkdir(server_dir)
file_helper.upload(__file__, '{}sftp.py'.format(server_dir))
file_helper.down('{}sftp.py'.format(server_dir), 'E:\\code\\mygit\python\\sftp.py')
except Exception:
sys.exit(1)
执行效果如下: