- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。! B3 D$ S! n$ K9 {+ ~6 |
o2 A* C( |8 N: Z7 S. [安装paramiko库
3 h O2 s0 ^9 {" c8 m' q) w; T首先,我们需要安装paramiko库。在命令行中执行以下命令: K. g) p: {9 E3 A+ z
6 i# Z( u8 T% s9 Q! p6 j
pip install paramiko
' b$ t3 v& w. l* t3 r6 v2 g# T连接到SFTP服务器6 s8 x% W: K o; o4 }7 j
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:, G: C5 L$ y& F* B& W
+ @$ o6 u. S2 `import paramiko
' e, h! G3 i6 h
" y# T8 P/ K) w) E N) q% ]ssh = paramiko.SSHClient()
4 x8 n1 w4 L$ d5 o0 H$ h& J( I$ T+ s# d# c7 p0 v7 c$ s8 `8 j
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:- d5 G: w' b9 k4 s q
' s( e3 v, p6 r
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
. C3 z& A Q2 l$ I9 E' _4 G6 O @0 Z
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:; p6 H$ r v- F- A
# I' B+ B$ H6 ]0 [3 B- ]6 {ssh.connect('hostname', port=22, username='username', password='password')$ G8 W1 e6 m, p! q7 u
. k, z+ z& G1 Y6 p- x0 r* A9 |' A创建SFTP会话
, M4 ~& F8 e! V成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
4 `. d: I# r( D7 ?, A: R6 Q; O4 u/ S2 `: m9 Q% b$ Z8 r. g9 E2 |
sftp = ssh.open_sftp()
V: a A2 K; Y9 G* V! U0 {$ p% p4 c. W" y) `' Z
上传文件8 G1 l5 Q: O2 _2 d
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
* m A9 x+ r9 U3 I, h2 H: ?4 N* g$ a/ X+ Q$ x
sftp.put('local_file_path', 'remote_file_path')
7 b2 c" e) G5 L! p9 G% }; X$ k, `. v8 `) o. A. x
下载文件
, j$ R, d" j3 ?! O7 b$ g除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:4 U9 p) j0 Q( }% v9 W0 W: ?! D
& v. ^' R4 t7 f* E6 H! X* E: i
sftp.get('remote_file_path', 'local_file_path')/ n/ z6 ~% }/ U$ o/ }" N" H
) `. x+ Q$ _& ~列出文件和目录
( k; E @( E. I1 j# z( }4 w: X/ u使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
1 Y$ S' f1 q3 q: Z' V/ M7 l @/ \8 _3 i
files = sftp.listdir('directory_path')
m( L, @( P6 Z) ~5 y$ b0 Y
- |3 g3 h- R! v. c* t6 G, K4 P: U删除文件/ z! ~+ t. V8 {) O. S3 L' `) Q3 _
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:7 }, @1 N8 M k2 A! L( R) j7 ?$ @
2 b% R& d: ?1 P8 N4 a7 @8 asftp.remove('file_path')( O& P6 ?* w/ |
8 d# d- i B. j3 }! ?
关闭SFTP会话和SSH连接& i1 }/ Q& E' L, T, F* a. {
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:% N9 }5 r. U1 N6 k2 V8 ]1 M
" a$ [7 H1 V; o1 {% I2 U# v" w
sftp.close()
5 e$ x) _4 |$ w+ {ssh.close()1 b- o. b9 C( u) z) @2 U. m& ~
; } ^4 `6 s" K% T, a& B
完整示例4 H0 }8 {4 L- F# Z+ V# K9 Q8 d
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
) Q$ l! {3 r3 N0 S/ H$ D9 k7 r
* _( j# a# I ^% k* @$ Fimport paramiko
& i5 k, n( l! n) B5 h" S2 u$ x* P2 f& J: ~- G
ssh = paramiko.SSHClient()
" W1 \. m( U8 J& ?: a, M% i- F9 Y7 |) W1 }/ Jssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
" @) s( u1 R! f2 g8 q- D* W2 q& p. h q |
ssh.connect('hostname', port=22, username='username', password='password')- S( A, w% k4 v7 a: w
$ v! e P+ j1 s$ x* [- \8 lsftp = ssh.open_sftp()7 Q- L% c$ V! M" i6 A# }1 f/ v
- c9 ~+ `; ~6 S* L2 nsftp.put('local_file_path', 'remote_file_path')4 `( q0 B7 E# M4 F) I z2 V9 `) o
sftp.get('remote_file_path', 'local_file_path')
6 y. l K4 U- q: L; G
% G: n2 w" B6 D9 H: S4 I) v* Dfiles = sftp.listdir('directory_path')- j) z4 h# }: C; m: O! [
) Y' O+ o3 g e' K2 x; Z) S& ^
sftp.remove('file_path')
, F4 h2 o- @0 G% U6 [. P* F' u* o7 a* E
sftp.close()9 a3 Z1 O: G1 ]; L* V f/ |& P
ssh.close()8 O0 k8 ]* W& C8 ]$ r7 X6 o: B+ _0 c$ [
# i8 J& F1 R' Y( i% o
3 e' n H1 P4 W5 ]# E! f* h
4 j3 [; |% q |! E9 n
|
zan
|