- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
7 }2 b) Z( \, R! r
, `, ?( C0 d0 q0 L% H) W0 J安装paramiko库) m: L3 k+ ~% b4 m& D3 e
首先,我们需要安装paramiko库。在命令行中执行以下命令:
4 V1 x) H2 }0 s0 [
. q2 R# I8 S/ H) X+ j/ npip install paramiko# b% c# u7 @' V% W! q2 V
连接到SFTP服务器
7 r Z) i! Q$ D) z( Z- {接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:: u7 i2 q' b2 E# i, s
) n. r: a+ P% A4 ^7 h
import paramiko Q5 R! @+ E( a, ]" S' `% O+ p% x' f
. T, i* s; V, ~: c& H, Q8 c. o
ssh = paramiko.SSHClient()
2 w+ i6 v$ y& Y" g- |
4 |; Z7 h8 I* k2 B5 d然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:) ]: f$ n b4 \$ \- Q
6 g0 E- a$ m, v5 }
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()): V! r, C5 X. C7 [# w* r2 E
0 `) c8 W! x( `) S: o( O
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
$ Y _8 x, `! O4 M( n
/ ]3 l3 N4 s0 Y1 P0 Y. Dssh.connect('hostname', port=22, username='username', password='password')
+ y& H4 _' d" c- h( w/ V. v( g: m; [
创建SFTP会话) ^1 t0 A% { c& K1 I0 p5 b
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:( ?# h, X3 ]; ]0 y# T
, V( u* c; h) y8 b: T) Fsftp = ssh.open_sftp()8 x* y, F ^* @, h, T: }! J& H
+ a2 b9 @2 M5 @! ~9 ]1 v- b/ G
上传文件; ]- H% Y( x/ n# {% t/ l
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:0 _8 R' | O( _9 h/ g4 s; n3 x
6 o- l1 ~$ V; Y+ @& u, c% O$ p
sftp.put('local_file_path', 'remote_file_path')
2 H" k2 W. c, D3 I# Q) K: r. S' p- n) l3 {3 o5 p" P
下载文件
, i' ~, f( i1 ?5 W: H, i7 b. e' C除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
! T) m4 {. b+ r. V) r$ }7 A6 @. g+ }. M1 U( ?: ?: ]0 s) a
sftp.get('remote_file_path', 'local_file_path')
/ V3 C) o: `& X0 J8 l) g) g
( y& M0 V6 o6 i( t/ L( w/ B列出文件和目录$ j4 s& |! }- `- i- |" L
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
5 d" u, Z( i: m: s( m/ e( L) i6 B% m) ~2 L2 n& G- R4 E6 o
files = sftp.listdir('directory_path')# t# U* S. r( I! R* Z
6 L) |) u1 |! o' t4 D& r) p删除文件
: W2 u% | ^; ]" O. T c使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:# M+ D, ^- J3 F7 j7 f6 q4 O
3 p5 b2 I' V+ {1 rsftp.remove('file_path')
5 H; }. S4 ~' `" \, i
- G( ^% [4 C5 a关闭SFTP会话和SSH连接/ }8 M7 H$ s' E5 {+ d
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
; k- Z* N" k4 @# |: V/ S) u. H
sftp.close()
& U" c+ Y1 v9 m. S, E% wssh.close()% d5 O5 }1 d2 o8 J, f5 B( K
& }7 u# @* Y' x8 J. N+ ~ y) O. {$ m完整示例! k: J' d9 L- m6 A* Q
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:- ?/ w6 U3 H) z- G: `
. z3 C; L: u; v5 ~
import paramiko% o$ z0 p' y/ R5 Y
' @& u: g3 |' N7 T2 b
ssh = paramiko.SSHClient()( F1 X5 Q# h5 }/ m: p
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()). d1 N4 Z* z7 G# v/ U6 j
: Y5 ~& o, b' c( L* _
ssh.connect('hostname', port=22, username='username', password='password')3 ~- _% L5 M1 ]- S
- t. I, q% F+ y+ |, e
sftp = ssh.open_sftp()$ h0 W& z# x! z* n) X; @1 S l" f
% t: A2 |/ J: w6 l2 [" Qsftp.put('local_file_path', 'remote_file_path')6 {5 E7 U# @! S1 k, w* o5 C2 _
sftp.get('remote_file_path', 'local_file_path')" t/ N# E& X1 f; ?& k# {8 q: m* a
% |3 K; H; G( K* u e+ i. b
files = sftp.listdir('directory_path')
) E1 Q) g# p! t, p- q9 _
" |8 Y! _, r6 r) u, Z3 Q2 T: Lsftp.remove('file_path')
: c2 A7 h+ S. b; K4 b; l1 L- H: d; j. I3 w+ E
sftp.close()' {& Z7 A- _0 K0 t! e! x& l" y
ssh.close()
' I, k+ `) v/ S2 P' v( _
4 f! v4 h$ j( _+ y1 k) V% P r% D
0 `) q* Z }' j" _5 n, w K3 d& W
|
zan
|