- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
* n" v' x( j! W% k1 C) \3 W' q% i: P ~2 D. r! U2 T
安装paramiko库
3 [3 E. c9 {" Z" V5 i首先,我们需要安装paramiko库。在命令行中执行以下命令:
2 J. W; x# T7 Z& ?- f d" f+ B) ^1 f1 I5 H) K+ o* Z; G
pip install paramiko2 [; U6 S6 j" G# J, ^9 A' b
连接到SFTP服务器
# c% W0 U! z. f4 A8 ]6 H& B接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
6 V. {# W5 ]9 r4 `4 Z# L9 l
* N9 a$ e( C3 m; l1 p2 `import paramiko
4 p/ G" _" m6 f2 h( L% C p' A
; w# M8 y6 E: Q! @# ]1 r' \ssh = paramiko.SSHClient()" |: j" i O$ A2 R1 d Z: d
9 U& ^3 |, ~: @0 q) u( N5 `
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:: a) @& S; N9 v
2 {: y6 k5 L2 ]; w' m3 J
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
& p2 c% L& g2 l% d& s
' U. E% i' w2 l/ J ]接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
" c# W3 }, H7 R1 t5 z( }5 ?, A! O& J: v% _
ssh.connect('hostname', port=22, username='username', password='password'): p5 M/ {; B1 y" O' {% _' \
/ E" p+ i: j5 u, b创建SFTP会话- j/ h! d4 X- F
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:8 g5 x! c* }+ D- ?5 z' P$ P* W
% H2 @+ j: ]: _; j+ Usftp = ssh.open_sftp()
: p) @" K0 l. ^$ \7 P
# m- A% f& n1 D上传文件; V* _) y8 N# P. _7 x8 r
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:1 H& V0 r, } l& G' W
& |2 j: Z- o: B1 [6 Jsftp.put('local_file_path', 'remote_file_path')
+ E+ c5 a9 Z- s5 z; t) P3 M9 F- X% @; X k+ u/ V
下载文件3 t9 v7 W( ?- J( X( b& g6 y' |
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
2 ^( K# u9 _! i% ]- A4 o2 a* |4 n0 f* A3 @& x6 e- d; f; c- C6 \
sftp.get('remote_file_path', 'local_file_path')
0 {! F& n1 W" n' W: ^) Y* W
/ Z4 F( v. X$ M. E% }列出文件和目录+ ]8 [$ q% H0 z
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:. D! Z# c+ @0 W
& n. l3 D8 u7 J l* q, D# N$ D) s
files = sftp.listdir('directory_path')" s6 b2 T$ `. [, W, t3 W
+ d' G- q# @. a/ N删除文件
# R. z& w' D. r8 d使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
# d5 f8 u+ M6 ~: I' c. F' s% M4 K4 _" w8 j( d1 r
sftp.remove('file_path')! N/ D0 W9 \1 g6 D- ^8 ?
1 d% G' Q- D/ Q3 T( w$ D关闭SFTP会话和SSH连接$ g( e. g2 V( j
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
4 x2 x q- G( V% H: A1 m9 U: n& T- r" ^% {1 C2 a5 o3 \
sftp.close()
* A9 I* C; u& P7 |9 nssh.close()0 `# R1 @% s' ]& e
* E6 c5 F9 }2 P7 @3 H# j完整示例
$ j2 A1 N) T/ I下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
/ ?& x$ p! a# A X6 R0 ?' S" L. Q) i) `- J n
import paramiko1 S; l/ X; X5 `- y, b, ^
# a" s" o6 F8 X, L
ssh = paramiko.SSHClient()
3 b# n9 E/ {0 \# lssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())* c- K l5 h1 _) \8 S, |( r N
' @' m' K$ c$ R# D
ssh.connect('hostname', port=22, username='username', password='password')
$ ?0 T# j- l2 L* V: Z Y: U; b2 o/ K8 i+ f7 ~: v# m
sftp = ssh.open_sftp()
+ Q4 g1 E. u. M) F5 x z ~) |3 @" u3 ^8 A% P0 V& t* Q0 K
sftp.put('local_file_path', 'remote_file_path')1 {! }& v( E' n( w
sftp.get('remote_file_path', 'local_file_path')
/ o! ]( X" Z8 w/ g+ b1 L+ p
3 j; Z& E- P6 Q: n9 |% w* bfiles = sftp.listdir('directory_path')
! S B$ u& }4 U# T; Y, I
: v- W6 C. m& t0 l/ J$ x2 d6 ` Nsftp.remove('file_path')7 Z; D& P ?9 }( k: l
( _1 y0 l0 ^5 v! Dsftp.close()& d6 D7 M; Z: ?4 Z" C, j o' z
ssh.close()
8 v# z. U; w6 p. ^. a {$ l' |( C$ c! E8 o6 y4 F2 v3 p
" ^" e3 s6 d4 z% s' Q' K8 A9 s& \2 t* [8 r
|
zan
|