- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。 Q E6 W. h2 \. R' M1 @' q, \
1 z& j( V0 V2 x6 G
安装paramiko库
4 t( @0 S \/ H7 Y x+ z首先,我们需要安装paramiko库。在命令行中执行以下命令:
9 E5 Z x. a+ c, P8 T2 U' c+ q$ p% X# A5 e: O7 c% x
pip install paramiko; k2 ?6 R I ^7 v3 K' ~8 T2 s
连接到SFTP服务器1 f/ W( W2 N8 d& S7 D4 |# x! C
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
- |& l C6 q/ n& L6 M: Y4 j5 I& p8 v" ^8 t
import paramiko8 o4 L% {" s! F3 ^5 ~# t9 }
( @6 s$ i7 [" }; }, | H/ Zssh = paramiko.SSHClient()
/ G8 t# z) K) F; h) O4 F0 o% W2 B; R5 n c. ^) y9 ?* e/ v
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:+ N' ? B0 B# ~- _
! o7 Y: b, b1 \8 ?; t- Z, V# \4 z
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()). v9 E4 p+ ~9 u2 e0 Y
/ X4 |6 P9 a; y; u( _: c接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:; d. z2 m3 `% c9 V1 Z
2 L$ b% N+ o3 O& x$ D, {- {ssh.connect('hostname', port=22, username='username', password='password')
3 f: ~' @( a5 q4 t, p# d
$ r: a: z: c: C! C% r" y创建SFTP会话* l. x; ]" r! W% G
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
, I0 b" j( R, w e1 s+ c! h& U0 N3 r/ e3 _# N- p+ e- B
sftp = ssh.open_sftp()' Z) s& U* ~6 R1 |; k
" C# {: M2 s" ?6 c6 C r9 Y# X9 u
上传文件
+ M- X% s: h" D, }现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:- ^: q1 E" J$ [) x' W
g t7 D0 v) p' }
sftp.put('local_file_path', 'remote_file_path')0 }# s2 J2 M% T7 Z: V% M
. ^! H: [, ^( T* L4 v, s
下载文件8 j" L c$ A9 X c0 W9 O
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:3 @" f8 `& S. S. q3 N, G
: c+ y7 b% A8 Q& u2 q; m
sftp.get('remote_file_path', 'local_file_path')' ~/ ^+ [! f; _) Q. n4 g; M. w
) n( `' u& }# ^7 O6 t
列出文件和目录
' l8 V6 _ y6 k' _' s4 C使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
4 L' V8 w5 M1 n b) J4 O
; e9 K& }* \" c4 p! x3 B5 d: bfiles = sftp.listdir('directory_path')$ ~6 X: |# z6 V3 U5 [; ~; T
9 \' W" S" w5 D L! H# `* r删除文件$ _( v9 l, V3 ]
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
9 J) H0 K/ `# {$ i1 i$ q: s" |% _" H8 F/ e9 |( j
sftp.remove('file_path')4 b0 x$ o1 B. b4 y+ u/ J
- B/ m% f6 N& C# J4 j! k: D关闭SFTP会话和SSH连接
3 x4 _- R2 [3 ~$ A/ P完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:' N. d2 |$ }. U7 c* [
% I& ]# b% a1 t, A& R. asftp.close()
) ^& |+ b; Z1 }9 J$ D& u7 d' lssh.close()0 L6 Z6 ?0 M: c, J/ t
% u5 ^. z2 K2 U. t3 }
完整示例
1 g1 K4 Q. y' F0 F+ T( h+ j下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:* b8 R- e" v/ S* z5 f) Z. {
4 e% x7 [0 x& m$ V% e
import paramiko
; _) _2 g l9 T$ E
4 V0 O3 F: Y' P7 r# T) ~ssh = paramiko.SSHClient()
* Z! E6 ^$ U9 [: Ussh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
: ?+ p6 n) ^4 d& w8 o- Z: l4 W
* }0 E( m9 }& P. ?8 L; issh.connect('hostname', port=22, username='username', password='password')0 R0 ?& M# d! m" V" X
8 x; l3 j2 y6 f- Csftp = ssh.open_sftp()
6 {. }% n1 H9 I! E4 W' v% J% i
6 r% w4 E+ A/ J! W& dsftp.put('local_file_path', 'remote_file_path')) r8 T6 K ~$ e9 g0 ^
sftp.get('remote_file_path', 'local_file_path')5 l& L. z" d5 G1 |6 Z( u3 x0 M
- P8 f* K5 L3 ]
files = sftp.listdir('directory_path')0 r7 f( o: D i: L y& x( `. K
# I$ q6 f; e, xsftp.remove('file_path')9 I3 r% {. C s, ?1 n
: a+ O) m( k( N `. n3 A A0 j: n, Xsftp.close()9 Z. B$ [# K6 A6 q& S4 _" ?
ssh.close()
& _/ {! z. k' }; P! _0 c9 @
1 P' l3 B4 U( ?! h p/ W$ m
0 H# E7 X' ~5 K; L# c8 B
. A+ K+ ?1 r, U& R, m$ y b |
zan
|