让我来讲解“python paramiko利用sftp上传目录到远程的实例”的完整攻略。
首先,需要了解一下paramiko的基本使用,并且需要保证本地机器上安装了paramiko库。
- 连接远程主机
首先需要使用SSH协议连接到远程主机。示例代码如下:
import paramiko
#创建SSHClient实例对象并建立ssh连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.1.10', port=22, username='root', password='passwd')
这里的hostname为目标主机的IP地址,port为ssh端口,username为ssh用户名,password为ssh登录密码。
- 使用sftp上传目录
接下来需要使用SFTP协议上传目录到目标主机上.示例代码如下:
import os
import paramiko
#创建SSHClient实例对象并建立ssh连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.1.10', port=22, username='root', password='passwd')
#创建sftp客户端对象
sftp = ssh.open_sftp()
#需要上传的本地目录路径
local_dir = '/home/user/data'
#目标主机上的目录路径
remote_dir = '/mnt/data'
#遍历本地目录中的所有文件并上传到目标主机
for root, dirs, files in os.walk(local_dir):
#计算相对路径,以方便创建目录
path = os.path.relpath(root, local_dir)
remote_path = os.path.join(remote_dir, path)
try:
#判断目录是否存在,不存在则创建目录
sftp.stat(remote_path)
except:
sftp.mkdir(remote_path)
for file in files:
local_filename = os.path.join(root, file)
remote_filename = os.path.join(remote_path, file)
print(f"Uploading {local_filename} to {remote_filename}...")
sftp.put(local_filename, remote_filename)
#关闭连接
ssh.close()
上述代码使用os.walk遍历本地目录中的所有文件,然后使用SFTP协议上传到目标主机上。其中,需要指定本地目录路径和目标主机的目录路径。
- 示例说明
示例1:上传本地/home/user/data目录到目标主机的/mnt/data目录
import os
import paramiko
#创建SSHClient实例对象并建立ssh连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.1.10', port=22, username='root', password='passwd')
#创建sftp客户端对象
sftp = ssh.open_sftp()
#需要上传的本地目录路径
local_dir = '/home/user/data'
#目标主机上的目录路径
remote_dir = '/mnt/data'
#遍历本地目录中的所有文件并上传到目标主机
for root, dirs, files in os.walk(local_dir):
#计算相对路径,以方便创建目录
path = os.path.relpath(root, local_dir)
remote_path = os.path.join(remote_dir, path)
try:
#判断目录是否存在,不存在则创建目录
sftp.stat(remote_path)
except:
sftp.mkdir(remote_path)
for file in files:
local_filename = os.path.join(root, file)
remote_filename = os.path.join(remote_path, file)
print(f"Uploading {local_filename} to {remote_filename}...")
sftp.put(local_filename, remote_filename)
#关闭连接
ssh.close()
示例2:上传本地/home/user/data目录到目标主机的/mnt/data2目录
import os
import paramiko
#创建SSHClient实例对象并建立ssh连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.1.10', port=22, username='root', password='passwd')
#创建sftp客户端对象
sftp = ssh.open_sftp()
#需要上传的本地目录路径
local_dir = '/home/user/data'
#目标主机上的目录路径
remote_dir = '/mnt/data2'
#遍历本地目录中的所有文件并上传到目标主机
for root, dirs, files in os.walk(local_dir):
#计算相对路径,以方便创建目录
path = os.path.relpath(root, local_dir)
remote_path = os.path.join(remote_dir, path)
try:
#判断目录是否存在,不存在则创建目录
sftp.stat(remote_path)
except:
sftp.mkdir(remote_path)
for file in files:
local_filename = os.path.join(root, file)
remote_filename = os.path.join(remote_path, file)
print(f"Uploading {local_filename} to {remote_filename}...")
sftp.put(local_filename, remote_filename)
#关闭连接
ssh.close()
这两个示例分别演示了将本地的/home/user/data目录上传到目标主机的/mnt/data和/mnt/data2目录下,以供参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python paramiko利用sftp上传目录到远程的实例 - Python技术站