- 在线时间
- 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操作。
" F) f$ o, v' Y5 ?9 k* Z1 \! r. i' l% Y' j. }9 Q$ D
安装paramiko库
: R/ m( ?3 I& c6 w- }4 W5 _首先,我们需要安装paramiko库。在命令行中执行以下命令:
) }' X7 U1 }5 ~) W, y* C9 V4 M
/ Z+ F* O% w6 w7 v- Epip install paramiko2 e8 k3 H- A% ?/ I' L7 A
连接到SFTP服务器
+ c' C- u0 Q+ w+ v9 X接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:2 y% y6 S1 A& l! C! U# h. e {
9 t; A: W. z, ?$ o* R2 oimport paramiko
- w5 k# s' b' Q: z- x
3 K8 l* O: a. i5 K% Yssh = paramiko.SSHClient()
% h# v c D/ A0 v! ~- Q! a1 V m4 q! M/ g+ x
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
( m8 R6 r! i( z
`- r2 z- [" z2 w% Jssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c2 M( W5 B# j
6 s, @8 `6 J6 L0 u3 U0 t. r3 b
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
' M' Z5 M8 @0 Z( F* u: i& G& c) [$ S! S0 c+ H4 _9 p
ssh.connect('hostname', port=22, username='username', password='password')5 ?6 |5 v5 _ l, N" M
$ b# u. i/ C& g$ P. U( Y创建SFTP会话6 y" O- {, G2 @& `
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
0 D) D( \- {% n8 o# X. Y3 y) |/ _0 @2 X3 J' w
sftp = ssh.open_sftp()
) i, v0 h: s9 _5 }% p5 S# u6 ?- H
上传文件
+ i2 x1 d, ]! N6 n- i现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
6 {" I# M0 d. Q9 Q8 g- P. A6 f# ?6 F
& z, Y" X$ b0 n' _; v9 ?sftp.put('local_file_path', 'remote_file_path')
( k4 Z5 F. M/ H+ Q4 T/ z7 G5 B, g* [
下载文件
K+ i$ l6 P7 c6 a% V) S2 x# G9 X1 G除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
1 c) u6 `0 L- P3 `# O- m, h3 G n/ r4 s, o. O- Y
sftp.get('remote_file_path', 'local_file_path'); N. A+ M. B8 G2 g2 s6 F: {9 D
* b$ F# t0 |7 O4 Z R
列出文件和目录2 u; E: D& Q* Q2 \7 }5 X
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:0 q3 g7 M5 V3 o2 B, j# q( @3 t8 p
; {6 e: M0 n8 ?! f
files = sftp.listdir('directory_path')* b! K% [$ x n" [ U+ \! L1 t6 ^) b' g
; f5 v- i: i4 y" C3 s" W# C7 }
删除文件
! O- w' t3 x/ U# I% g* k使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:3 ^: }% q$ L) m: G
* H' O, K7 ^. {6 K
sftp.remove('file_path')
7 p8 L; b! l' E+ [7 s: T! m$ L
0 h- B. f) E7 V# X关闭SFTP会话和SSH连接2 I& U w" M. X* o
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
# s2 t# Q6 a+ j) N8 c3 e' Q" O* s$ ?
5 ^$ L* [1 g; u3 o* S! Rsftp.close()# i( Q5 g( V" x5 I# T9 L
ssh.close()! p% K q1 e7 ]( u. o, H
1 L" L/ R2 _5 E; {5 L# Q+ r完整示例
+ `6 k4 U. ~5 u1 V" L. @4 C下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
% ]/ g: r& O& k% ?" A7 h& X
& C% s+ g, Q; B( Q! O3 Rimport paramiko
5 p+ D: M4 D5 T. R4 \- p: V- f$ R
ssh = paramiko.SSHClient()
9 F N- U4 M) u$ s4 a0 Zssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# c. p8 Z" V6 P: t% R! U6 A' _% d0 w2 g9 S7 m; I
ssh.connect('hostname', port=22, username='username', password='password')5 y4 i* D) O- |9 k
6 d! u) R. a& ?0 x, _- P. p
sftp = ssh.open_sftp()
7 ?8 m- j+ F Y/ \. y7 R% @' j' E" h
sftp.put('local_file_path', 'remote_file_path')" J% m% s T' ^6 |! _
sftp.get('remote_file_path', 'local_file_path')" n1 Q2 k! s) p
) V7 \2 `" W8 bfiles = sftp.listdir('directory_path')
$ d6 z+ T5 |, s4 Q+ k
# b3 O+ c# _" U5 wsftp.remove('file_path')0 \3 `+ Q+ p C, p5 l; ^- u# Q
: C3 g, c% E* n9 x; U2 gsftp.close()- }1 o1 o+ O' a" [. P$ s
ssh.close()
% f( k9 k [0 C) U6 i# G' i2 ~( S) m
# x Q0 d1 H$ K. k& }0 _
: E e+ Q! e+ S% @6 a/ ^& C1 o4 L |
zan
|