- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
- m4 M7 _9 j, Y7 i) x6 |
& m0 q7 E7 o' T: q安装paramiko库* I# v( @, P) Z1 r4 e2 q! u$ S
首先,我们需要安装paramiko库。在命令行中执行以下命令:) d R- [, Y7 m: x
5 W! R; O$ o' p
pip install paramiko8 G+ R0 O0 v, a, w8 [
连接到SFTP服务器: Z4 Z* R+ U8 P, I( a" H4 c, x/ x, e
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
, @- w' O: b7 b& }7 ~9 C
2 Z- H1 k0 S+ s2 o; [$ D5 u- a# J; \import paramiko) q( S* g# w* p* o! G; Q4 m
, M7 ~& g* q% b$ \& Q" t8 `5 t9 I! I. q+ s
ssh = paramiko.SSHClient()! n) p" @% Y9 V9 P+ S, ^# a
/ O# f, P% a$ P然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:8 o. ~" J. Z- g; \5 H
; V- I2 g. Q* A7 | L+ Hssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())% A( M4 G2 M- V5 b+ E L4 C
, g' l* k/ C8 x5 p! S7 B* Z/ ^2 R9 v$ T接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:2 c; ~! }0 h6 q- T5 K) O+ N
, T; [( n& L9 U3 w' K
ssh.connect('hostname', port=22, username='username', password='password')
. O. ^9 h& p0 M
! M+ I- ^0 [9 O0 H% h创建SFTP会话2 o8 Y6 H8 w: ~# t3 Y i0 i
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:( X! f6 \8 M; N m6 r5 v
3 k2 `' w& i$ y& J
sftp = ssh.open_sftp()
' w' A! @, E5 ?7 t X9 a z
0 O. q: ?% x% N) m上传文件
0 |9 p+ r7 \- ?8 @现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:9 B. e/ j* o1 b% w9 k
& L/ K# M9 e) A4 C/ K: I2 h
sftp.put('local_file_path', 'remote_file_path')
1 Q' v) i/ a9 K7 U) x: S8 [
I% V! D! N+ {& e1 v$ U下载文件
& G6 R( P/ N: C! O2 z+ J% z7 W除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:* J- ~6 r" R$ [! i: j; l1 ~
8 ?) ?; [ P; J9 P6 J- g; b( Y
sftp.get('remote_file_path', 'local_file_path')
1 D- a# x3 |9 ~" j* o m, m! C
: J Z2 A3 q1 ~& c/ w列出文件和目录5 ?; V0 R. q: R, Z# P& r
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:" J! K7 c) M. a% G
% X2 h' Z7 \% K2 T& k. s7 f
files = sftp.listdir('directory_path') X8 Y) |1 \0 ~, C& P* |
/ N! s8 J* e% D j; w' j1 `& ]
删除文件$ h8 @0 h5 ^$ a) e9 {+ S! U1 m
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:6 r, A% S) @. ?( _
- A" g2 L0 a/ l5 j7 e# P
sftp.remove('file_path')
; T+ a4 G8 r0 e: Q! ?: F1 m; l
9 l9 q1 k1 ^) N& F$ G关闭SFTP会话和SSH连接8 y8 L9 w* l+ M; ^! F
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:5 u7 G3 f) O3 i9 h
& I5 i6 [, y5 `, d2 G! s
sftp.close()- [8 t. h$ C* [3 r8 P) f
ssh.close()( R- F8 D% q+ X+ f- j
# h& w% i* J1 @8 _- y完整示例
# s$ V5 S4 b2 n) w B- G; k下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:+ X, A- |$ }, u. m% k, x6 d7 ]
% A# B/ U$ I6 A: Y! Wimport paramiko; a+ z% j% b, F& h% \+ _& U7 R% ~& P
4 J' z! J) q' U0 u
ssh = paramiko.SSHClient()
# ?# W& p6 m( c: ^/ }ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
" G, K/ r- R8 A' N. E
3 S. T$ ?5 b. l* @ssh.connect('hostname', port=22, username='username', password='password')5 V+ ~) d) R7 y; {+ V x
5 Z1 [* j& y; ^6 qsftp = ssh.open_sftp()
3 T6 p% W$ r: S3 A* J! b! ? b5 Z1 N y7 v( i4 }$ p% ]' o
sftp.put('local_file_path', 'remote_file_path')) G0 g$ U! K8 u7 d# ^; g
sftp.get('remote_file_path', 'local_file_path')% P6 L9 ?# R& K; m5 g
) a p% X/ t. h) h9 c# Zfiles = sftp.listdir('directory_path')4 {; d* u" m/ q0 D$ \% F0 r
3 {* X$ s7 h0 L5 ~' F
sftp.remove('file_path')
+ `" d7 i; ~$ S3 x( P- p v& R5 U i u8 k) n9 {
sftp.close()% c3 t% g: C% u4 T4 e- H! C
ssh.close()
- W6 U6 @6 w% O- I0 w2 p
9 m% g* {5 N3 D0 f, t
# @# Q# b6 I+ N4 L
& X& d/ s7 S2 ? T3 [* V- K S |
zan
|