Python使用Paramiko通过SFTP递归上传本地目录至远程Linux服务器
本文介绍如何使用Python的Paramiko库通过SFTP协议将Windows本地目录递归上传至远程Linux服务器。代码实现了自动遍历本地文件、在远程创建多级目录并逐个上传文件的功能,适用于需要将本地资源批量同步到远程环境的场景。
网络上大多数示例仅演示了单个文件的上传操作。基于现有博客内容的启发,我编写了一个小型程序,旨在实现将Windows系统中的整个目录递归上传到远程Linux服务器的功能。
具体实现代码如下:
class ExportPrepare(object):
def __init__(self):
pass
def sftp_con(self):
t = paramiko.Transport((self.ip, self.port))
t.connect(username=self.username, password=self.password)
return t
# 找到所有你要上传的目录已经文件。
def __get_all_files_in_local_dir(self, local_dir):
all_files = list()
if os.path.exists(local_dir):
files = os.listdir(local_dir)
for x in files:
filename = os.path.join(local_dir, x)
print "filename:" + filename
# isdir
if os.path.isdir(filename):
all_files.extend(self.__get_all_files_in_local_dir(filename))
else:
all_files.append(filename)
else:
print '{}does not exist'.format(local_dir)
return all_files
# Copy a local file (localpath) to the SFTP server as remotepath
def sftp_put_dir(self):
try:
#本地test目录上传到远程root/usr/下面
local_dir = "c:/test"
remote_dir = "/root/usr/test"
t = self.sftp_con()
sftp = paramiko.SFTPClient.from_transport(t)
# sshclient
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self.ip, port=self.port, username=self.username, password=self.password, compress=True)
ssh.exec_command('rm -rf ' + remote_dir)
if remote_dir[-1] == '/':
remote_dir = remote_dir[0:-1]
all_files = self.__get_all_files_in_local_dir(local_dir)
for x in all_files:
filename = os.path.split(x)[-1]
remote_file = os.path.split(x)[0].replace(local_dir, remote_dir)
path = remote_file.replace('\\', '/')
# 创建目录 sftp的mkdir也可以,但是不能创建多级目录所以改用ssh创建。
tdin, stdout, stderr = ssh.exec_command('mkdir -p ' + path)
print stderr.read()
remote_filename = path + '/' + filename
print u'Put files...' + filename
sftp.put(x, remote_filename)
ssh.close()
except Exception, e:
print e
if __name__=='__main__':
export_prepare = ExportPrepare()
export_prepare.sftp_put_dir()
由于开发时间较为紧凑,代码中可能存在不足之处,欢迎指正以便共同改进。
以上是关于使用Python Paramiko库通过SFTP上传目录至远程服务器的完整示例,希望能为读者提供有价值的参考,并欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













