在线时间 480 小时 最后登录 2026-6-1 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7823 点 威望 0 点 阅读权限 255 积分 2934 相册 0 日志 0 记录 0 帖子 1174 主题 1189 精华 0 分享 0 好友 1
该用户从未签到
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。4 S! ?* y" W& Q6 U
* V: q9 j* Z; [" C) C 安装paramiko库# h) u' U6 [; F0 G$ U
首先,我们需要安装paramiko库。在命令行中执行以下命令:
. v' V8 L1 D. Z: r1 ~ - k' v* N& |3 z! L
pip install paramiko( ~% x% H. N, c' i2 C( }$ q
连接到SFTP服务器, p0 \" G' n- j8 a2 x
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:1 a, f% k j: G9 l: R
* U' A+ X2 j+ j; V2 B3 H" y, J" l import paramiko# a# y2 J& A4 q" o
' h8 ]) x& ]+ V$ [' L5 f0 Z! e ssh = paramiko.SSHClient()/ j+ H: C7 R/ F4 \/ G: w* O4 `: d
( ]. c5 r* E( G( s" n5 @- H
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:/ B2 s0 y% M% x$ Q' V2 N6 s
1 d! R/ ]( G. `- ^; q% w ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())+ l T' O" ~, T
8 {6 L7 F* o" _1 S4 P
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
3 f) i2 L; b2 b* S. a: b) Z: w ; T* f+ _( e$ G, ?5 R
ssh.connect('hostname', port=22, username='username', password='password')0 P- f: s" v8 W/ l8 x
" a/ Z" a& H9 |/ b 创建SFTP会话; R1 k( y; W0 v( h( p
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
: }7 |; @2 k, @5 X6 ^2 }
2 B: ^4 k. B# a sftp = ssh.open_sftp()
# {- B7 y; l4 d _
]5 D- f! S9 X, w( l( [ 上传文件8 l! ?- [& `) f% A' @+ w
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
/ [+ S5 m9 u- D \. B/ R) e2 } 2 s, e7 S7 z; o' w; Q
sftp.put('local_file_path', 'remote_file_path')+ C; E* b7 ]# `' F2 [% g
7 a- v ~, D: T3 q, Q! _
下载文件7 w$ Y) g4 F# I8 H. W( V( [
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:- C" N$ R# L# ]
+ E3 E. ~: z9 k2 | k5 h sftp.get('remote_file_path', 'local_file_path')8 P$ i0 z9 m7 V' s [' |
* E5 U; Q$ z! p! S6 A
列出文件和目录; a3 `. O5 [+ l0 \/ h
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:# M# P- B3 N1 r4 ?& B8 N' G) @8 ?
( i+ T5 @% `6 m f/ `- Z
files = sftp.listdir('directory_path')! ~( W: V* S( X9 e& u3 \
7 j3 x% ~- l8 N+ \; u* k
删除文件" a, h( N2 t# V6 a) ^" P+ V% S u
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:! ~& O4 N& H9 b) t6 R' T
" z8 F: V- N1 E sftp.remove('file_path')
; ?5 H5 Z+ B$ o8 ~4 M * t9 T7 z% s. d" }! O s4 K6 _
关闭SFTP会话和SSH连接- {1 V" J( V! l) G$ s
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:4 [3 ?% I: U6 f5 E* t- l: G7 ^
9 V6 d" r- L; c% m6 e. Z sftp.close()
: O8 G3 s, u; j" v6 A ssh.close()
X1 P3 j$ c" C% S$ v m0 Z4 M
2 k& b$ @1 F' c, B# g# N! Y- `9 B 完整示例) j9 S3 C/ D3 M! g3 ~
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:" O8 V0 }) m- S$ z9 C
. U7 m* |$ z8 ?
import paramiko# m3 w' Y+ t$ R- @, m: j
2 k# i( o+ W+ `* k, Z" N5 D/ L
ssh = paramiko.SSHClient()
" _ {% |* Z$ t( w7 r+ F ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
8 M! D& f9 `0 H2 P
3 G6 N+ g0 |& L5 S0 b ssh.connect('hostname', port=22, username='username', password='password')
( M' P# Y4 D6 y; X0 _
8 R, z0 l! ], U, e Z' b$ ?( v( h sftp = ssh.open_sftp()9 J$ c( m! ]$ a) m/ z5 W6 p3 |
0 @! }7 x9 Z9 s& u sftp.put('local_file_path', 'remote_file_path')
3 b* K) B: h: x5 d/ F' N8 U- e sftp.get('remote_file_path', 'local_file_path'); Z: y! G) p ]. ]5 G( @6 x
" ]. j6 D5 x7 s+ \! ]0 ? files = sftp.listdir('directory_path')
, \% q1 G& N/ b" e, t' e( p
5 B! y& ]. X3 N* D& M+ f sftp.remove('file_path')
' _0 v. E' v$ ~9 e) c, g
" o6 W. b/ _: R sftp.close()
; y2 b1 q( ~5 I- O ssh.close()
, d* I: y& t. g( G/ X$ p 9 ]' }5 f- o& ^* C4 z
0 y+ _2 A G; Z. d, H
; [" Y- f+ p. _- t# P b9 x5 v
zan