- 在线时间
- 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操作。
( X' B$ [1 C _1 O# j+ j6 \- V/ H. T$ \2 E; F' X
安装paramiko库
* V( e" r5 A% _2 ~1 A$ c. r' j, j: ^首先,我们需要安装paramiko库。在命令行中执行以下命令:
9 e z0 b& t* A9 c- \, T6 v( q; n
pip install paramiko/ T3 ^! Q( ]* f" F
连接到SFTP服务器
, F" N0 m1 C: n# |6 @0 I接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:/ g3 T8 x6 n! ?- Y( h4 C
5 d! P7 Y4 o$ O3 q) M& }! V( @
import paramiko
# l, I, g1 H3 b6 d) m6 E$ c
, u% K& x+ M" i5 S/ o/ }ssh = paramiko.SSHClient()" c) a7 T: R5 X8 I
8 \" a: d$ N% @2 K8 u然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
% x( t# @* L( T
3 r) z L+ v% Z# {- zssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())* n% A! {, w; U1 S2 @: ?8 N
+ b3 h \8 h# [; t1 ~- P# x3 k接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:4 m: p1 I$ k0 l. G/ ~+ g: y
! P3 k, [ P' {/ {: {! Fssh.connect('hostname', port=22, username='username', password='password')
3 S$ G. m; ?( U( I, ~% q* c' Q; l4 s+ M( Z
创建SFTP会话
, @3 a x# n/ h8 u+ a: R成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:) X/ }0 N; K2 l0 C+ ]
1 i4 ^4 N" M" e- Y3 G: c* j/ [. p
sftp = ssh.open_sftp()
. P! x2 S+ B6 C- m# v. J" B' K$ U3 N; F6 k
上传文件
6 B9 }9 |7 x5 c0 Z5 q# }* G现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:- Z; L3 ^5 v% G* p, p3 S, w
4 T' Y G9 l3 o/ m1 p. w7 a' {sftp.put('local_file_path', 'remote_file_path')
, D8 c0 u( m- Y [2 j+ ^. q, b& Q' y4 Y
下载文件4 }$ I. C& x; A# W' H2 l$ ^- v
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
/ d5 J7 L% h" M0 h6 e( }# S/ q9 |" ?5 L \5 u
sftp.get('remote_file_path', 'local_file_path')
! J( X% n7 v* u
! t( b9 U! ?7 b6 o3 d- T列出文件和目录# w. v* ~- K; ^9 A J: C9 D
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:' _; ~/ E9 r* S ?1 j9 O# z
! A8 N. R) b4 i2 m! ^files = sftp.listdir('directory_path')0 R+ A2 H8 H* O$ k
% T# ]7 w! p' F+ X3 w2 r9 g
删除文件
/ n' ?- Q& C4 y l使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
Z U" j+ `9 s: N8 A7 L7 p% @' B7 |5 I( b1 ]
sftp.remove('file_path'), n9 h& K- t( Q7 Q* G: K; f
- c2 ~0 y+ P; t$ r; P2 y+ f
关闭SFTP会话和SSH连接
8 c5 m3 a( R+ }/ y9 T. S完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
7 @, @/ ~7 S7 k
. V& w" R) Z; X2 d) P$ fsftp.close()) W# F9 Z$ X/ r9 m) r. z w
ssh.close()
, n* i* G+ C& D0 N4 M. C; C6 {9 j1 e4 ?( r9 G+ s" m7 s+ z
完整示例) b9 P' f/ X. z- D X
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:! ` ~& n4 N- r9 {5 V5 T
% Q. k1 j0 X9 S# V7 V O
import paramiko, l$ f7 N4 l z X
1 O7 R/ X* x' U4 z* Y9 @
ssh = paramiko.SSHClient(): b. m) ?6 Y+ u% V9 v7 e+ t5 A
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( N i* R& _: d3 X- F; \( w, D' t* L3 f1 l9 J
ssh.connect('hostname', port=22, username='username', password='password'): \* Z7 r4 X! ?
9 S2 n0 Z! ^0 asftp = ssh.open_sftp()2 A! b; V0 Z' `# a, `3 d
# \- A' g5 l1 ]& T6 ^
sftp.put('local_file_path', 'remote_file_path')8 {+ o, l. I6 m
sftp.get('remote_file_path', 'local_file_path')
; s/ X" N# S, {. I2 K! ^# u2 y* V
/ H9 \8 ~) |7 O* L1 Hfiles = sftp.listdir('directory_path')
+ F4 V0 s2 D6 A
- o. P# x/ K) \6 l; p6 h& J% `5 ^/ fsftp.remove('file_path')
0 z9 B& G+ P$ U% U# c/ `/ K* {0 z- r2 x4 I9 [" m
sftp.close()* M$ a0 n. ^1 r8 m
ssh.close()3 }$ M% {; I3 ?) Z* s
+ B& X$ R0 ], \8 }% o
8 K \9 S# j# Y: S! J1 K
9 s( |; X/ ?- @/ l3 _1 j0 P& v3 K1 L/ r
|
zan
|