- 在线时间
- 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操作。! v- r; e5 a; t3 Z$ Y% o
; h2 h/ ^. W3 L" N" n: F/ w
安装paramiko库
# j; M* e7 y8 N首先,我们需要安装paramiko库。在命令行中执行以下命令:: _7 K( K2 F$ j' i
4 L. i" R1 {( x5 W% W: ^; E
pip install paramiko- I) w/ I1 Q6 \' b
连接到SFTP服务器& N6 \0 m7 t: I \4 c8 r8 y
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
; ?. U. c6 V/ j2 [3 a+ g& y
3 }( v' `2 v" N0 ?8 Iimport paramiko
% P9 q# O& z* g2 g" Z1 R0 N! }* r: B% R! {
ssh = paramiko.SSHClient()
& E' _2 L3 W0 p9 u) f& ?- r1 n2 O( w0 u* f, ?
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:* {! k$ i+ v6 X# g7 G' m. b1 f
$ V0 w! s) U7 N0 H$ e+ p* [ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
* p% w. ^6 K, @
8 t4 v( D! r# s9 ^0 \( q0 ]接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
2 y% Y& l$ y8 L) k$ I4 X6 `( M6 o8 z/ z2 c
ssh.connect('hostname', port=22, username='username', password='password')# \& K9 M/ n( v* M
+ m" u5 s5 ~, }: f& X
创建SFTP会话# Y$ N$ E3 [3 P& e- B
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:3 ~% P* d" C3 F, h4 y
|- q. N- N: t$ B5 \, Lsftp = ssh.open_sftp()
% ?7 s3 ]* P& ~4 u: b
0 h& L! l' I' {* Y8 l5 P9 t上传文件
2 h# Z% E+ `; k) I现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
# P4 k9 j0 b6 o, D! R$ E2 x. E; A8 N @( d0 z- r; @
sftp.put('local_file_path', 'remote_file_path')
# @0 A: |, r0 A J) W3 X( _7 G7 }
) e% z, t6 D1 c+ S: d( @/ o. L下载文件) l9 d' ?" p8 C9 x2 }2 H( s Z4 ?
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:" @* X. k6 [* L' l2 s/ X! ?9 ~
0 x4 e0 g9 w; jsftp.get('remote_file_path', 'local_file_path')0 j) M5 b9 @. I3 K
% n4 v& X9 C2 t3 u6 J1 a0 k列出文件和目录
" {( E1 v% }' ~! e% Q8 e/ Q使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:# J3 F5 k* x) G# d4 ]: X4 q
! g# \; X% n3 s; S9 afiles = sftp.listdir('directory_path')
5 k, l$ i8 Y- B( B1 q9 f7 D) @- X
删除文件
- S4 r9 l) O1 V& @8 V" Z) e8 g使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
! L3 N+ r$ E r3 [- w3 a1 Z3 H5 C ^4 f8 j6 Z/ w: ]
sftp.remove('file_path') W, O( M4 j P) z
1 V1 |5 A! q3 x, W% ^* _关闭SFTP会话和SSH连接
$ U2 U- B: G$ V1 b# k- J6 n3 K完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
" j" B2 A! l3 P: ]+ }) p1 x$ S1 u
sftp.close()( g9 z( l% g' _! N
ssh.close()
9 z* |2 C2 T2 R' R& V8 E: {
; d. g; s; l1 r9 k! z9 A, M- a完整示例% t8 Y; | i/ l- [$ f3 ?
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
2 j' Q, K" ~' ]$ I5 f+ V2 J5 `9 s- p+ g, u3 t1 q; i
import paramiko
/ n9 O% M( J- ?) B b4 N5 }- Z \2 ] f1 j* M
ssh = paramiko.SSHClient()8 F6 b: x+ y" ?, G% b0 b
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())+ n$ ?; b9 {! }6 U; z+ t
4 N b9 W, d% v0 D5 Ussh.connect('hostname', port=22, username='username', password='password')
, T' d0 Y! ~* |3 M
* ?7 q8 V$ n& W e5 z- }sftp = ssh.open_sftp()
" k. F2 x( K3 l
5 g5 R. `4 E9 |sftp.put('local_file_path', 'remote_file_path')' H& Y, o3 A: t" ?
sftp.get('remote_file_path', 'local_file_path')8 V( \5 w6 _: v- f
, n! L. x8 T& V( C! I0 S* n6 Efiles = sftp.listdir('directory_path')7 P7 v- Y k/ ]$ Q- C4 e. O: j$ j7 Z
8 z0 b) y, d @8 W: Z3 v( asftp.remove('file_path')+ J1 r0 Q3 t8 d; ^2 U% L. `
! T+ p/ e5 ^* x) z
sftp.close()
, C: z' j6 E& z" w( mssh.close()
B4 I; j; v: }1 m2 h4 o l) q: O
3 Z7 q/ k" O# y. m( g- B& J3 u5 X. s2 d: Z3 o) b2 Q& W
9 I; R5 V% F) T; ~! I# { |
zan
|