在线时间 481 小时 最后登录 2026-8-25 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7859 点 威望 0 点 阅读权限 255 积分 2946 相册 0 日志 0 记录 0 帖子 1177 主题 1192 精华 0 分享 0 好友 1
该用户从未签到
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。0 Y5 F! H+ p0 O- B
* P }- e6 r$ N8 B
安装paramiko库; u+ {% `+ m( K7 i: h o
首先,我们需要安装paramiko库。在命令行中执行以下命令:( D, z, k; L: E8 U/ p
9 [9 Z- J ~, i, N. Y9 W pip install paramiko# |9 N/ A9 ~4 M" {
连接到SFTP服务器
1 a! R/ P$ Z) G/ y! G ] 接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:6 N. r' v: P# t$ |3 T& Y/ I
$ X& J) ]; r8 p/ ~: w5 ^ import paramiko- U/ I' R3 @1 ]! v% c0 j
/ k% u# A" e: t# D ssh = paramiko.SSHClient()( w1 O% N- y! [# ` h5 }
& y' Z4 t+ C( @ 然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:9 H0 f, {8 l3 J {/ j0 o
- q, e L. m$ L! S7 c0 @% ?& m
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())% ^6 T4 `% U1 m" @( ~6 O
1 T3 G7 I! }, ^& x% G7 L* R 接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:0 y0 ]8 W) A7 t8 ^ `% u
0 |$ X/ t( U1 v$ O
ssh.connect('hostname', port=22, username='username', password='password')! }+ d9 w) w* \* @+ Z; p
( i8 n2 R+ K$ V* }4 Z6 K 创建SFTP会话' M' i% W/ f( r' q# A. N; j
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
: f7 V: x4 D8 A2 Z. q4 P5 M& ] & i! b1 i+ l( n) r/ \1 _
sftp = ssh.open_sftp()
: X1 h9 \4 W* g& H; W
' L K/ B F8 b1 L% Q- z1 P) S 上传文件
2 J1 ?% B8 T1 P 现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
/ o7 ]- s- |, Q; a$ m- i, C - [' }- E ~1 z0 z
sftp.put('local_file_path', 'remote_file_path')% z% p2 i+ Z. i7 B0 n( f( t
& Y( C/ ` K: P5 ? 下载文件. v/ f. x' K6 c. D1 [% r
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:" d/ Z1 H; m5 Q0 h
, z, b8 D0 V, \5 I/ [; j sftp.get('remote_file_path', 'local_file_path')3 s, s' x+ {9 v2 o! V' H- M
% Z! O+ f% n% T; C
列出文件和目录 b p$ w" q1 e
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
9 h9 a8 h7 p- ~3 s
9 l1 ~( D8 }6 p4 U1 n2 h* C, W files = sftp.listdir('directory_path'): v, K9 ^8 N( w! z
# Y* o1 m4 k7 a! f$ X6 {+ L
删除文件7 u' G% ?6 D2 K5 f
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:- a* `3 C1 q: v4 C
% p: [- \4 Z- O3 [+ H0 y sftp.remove('file_path')
9 Z) {0 k b6 q
- y* g8 O% j |. {- i. _& B: ~) d 关闭SFTP会话和SSH连接
, w" t& ]4 ^" W; A3 X 完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:) {" w" B% ^' q$ Y V
7 Y3 b5 m% J0 m2 H& ~ sftp.close()
" [" p! q7 M6 R7 \& H0 W8 i ssh.close(), S# A$ E1 R C7 i
J! P9 W, y! E7 k 完整示例
; E0 L3 V; R1 c u3 D6 g 下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:3 \5 E7 e! Y( B) F% V, t9 Z
' W# P3 }' t: z9 D1 S import paramiko
$ ]' t4 B- a) @ {. m! n( n \
6 p! x0 L1 j% V" v5 f, A' U# E" Y$ }/ Q P ssh = paramiko.SSHClient()! J' A' x, Z! D$ J3 Z- g* I
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
8 Z7 R, a- T# {/ i) m . ^3 |5 {7 } y( H
ssh.connect('hostname', port=22, username='username', password='password')# T3 B3 F) d! ]4 J: i+ v
! S- x0 ]9 V5 X7 c2 A0 t" ? sftp = ssh.open_sftp()4 o1 G3 r: O# Z
+ r* w7 s* O r* b6 O( ^ sftp.put('local_file_path', 'remote_file_path')
9 }! F5 {7 r6 i1 G- B. R sftp.get('remote_file_path', 'local_file_path')
( S, i& f' n% ?! w6 q, B3 U , @1 U4 y: f% s, [
files = sftp.listdir('directory_path')
0 a5 ^7 x2 M. @$ _$ Y2 k0 G 5 d* a% Q; K, i5 j5 Q$ l. J
sftp.remove('file_path')$ L2 O( J/ B9 v+ b* n2 ~
: ~; g/ K6 w4 A# Q( a3 { sftp.close()
8 M# P* F7 i! k' G7 ~ ssh.close()
, q' u2 s4 T% y; i 7 F6 ?6 p6 s" h0 ~* D; f0 J
; l; Y; H8 O f, v3 D* x: g
3 m, Z0 P! J; X6 B8 Z
zan