- 在线时间
- 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操作。
& g9 t7 r* D1 P6 Z# T1 {; ]& X& O
9 A5 w3 l6 {. B+ n: E安装paramiko库: W( g/ i8 q) q
首先,我们需要安装paramiko库。在命令行中执行以下命令:
( F3 k1 F0 }0 l W. s/ v
" d1 {* n* ^& q8 w4 w* y: [pip install paramiko
* Z1 D$ i+ O' w! R. F* g8 k" M连接到SFTP服务器
; ]+ A% r* R v2 r$ k& B接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:& M, b* k+ _: w% s! Y
. U) H# |: f+ B2 t8 Wimport paramiko
0 I, f t z1 N5 E# S, ^; {7 }, C% G- `6 j$ }: I* J8 n
ssh = paramiko.SSHClient()
) [1 @5 T" m8 g) w/ x! Q$ U6 h6 C, `( s" f1 l( b1 }; O3 @
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
' R8 t/ u# u* R1 O( K. h0 m. }+ F2 l
( q% f, e/ I( M" d7 z- \% assh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
1 V0 y3 [1 }4 {* r! T$ Y! t# E$ B+ F9 C' W% D; _
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
% h3 M$ o5 b- t3 A1 k( {% }" w) m5 f. d$ D, U4 i
ssh.connect('hostname', port=22, username='username', password='password')
0 a1 K9 w0 Z9 u/ e$ w( H4 M
6 f, D- L: ~% n7 G: M, T' I, l创建SFTP会话7 w6 x) @# z2 n- X. C
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
$ `7 Y) J/ w* _3 A8 n! \7 l! a, H+ z' z
sftp = ssh.open_sftp()
1 y6 d# |, v4 I' @- k2 T9 D# ?% }3 [' v/ K% t2 o1 ~6 J
上传文件
% j% R; m- v* K. t4 B; E8 _现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
+ h) L7 j5 i7 ]# s0 W/ H4 a
& A4 ]1 L! u5 _ ^; e3 J& z4 @sftp.put('local_file_path', 'remote_file_path')
0 M' o/ ~8 X7 p1 U0 H
5 p3 t) ^0 @2 F0 {4 s下载文件
% [; Q3 ], V% R: t+ d4 _& k) |/ ~, E除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:( t/ ~: j& q5 ?' K6 n8 F
7 j: P5 Q1 T: D3 ^* x# [6 Psftp.get('remote_file_path', 'local_file_path')7 T* R: M% [: M0 \( e' B
. m& O" g' ]) Y0 R: a列出文件和目录: |& P" g0 p. |: P
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:' @ W5 {: p* |7 h( F ?( }
/ R; Z1 l9 W, A/ V5 D3 Zfiles = sftp.listdir('directory_path')* P1 W+ S( u% L/ S: f
( |0 d, `! p) b3 m3 M
删除文件
$ M7 o" F- p5 K ?: J$ ~使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
. y0 C. r& J. ^ D$ j6 X! t& ^4 [8 ]( k/ b
sftp.remove('file_path')
3 e6 W8 f# p a# ~5 M( q# G# I) q/ q# C
关闭SFTP会话和SSH连接
3 A( H1 g, T1 h) a" t2 P4 C, `完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
. C+ C0 M- j) G+ v& ~: O- o% i2 n j3 I' F3 h
sftp.close()
6 Z% `# N0 u" U+ X7 n$ Rssh.close()
& U5 T- g% p5 Y( {4 W6 G0 U" p4 ?* L" u- \4 X8 x
完整示例
+ t) [- g1 m( w- Y下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
/ S4 _4 D3 b! T& J' ]
3 B, [& _* ~1 H1 N0 J$ l: u6 j2 d8 eimport paramiko/ t3 q: z3 ^! z
0 `; ?- @1 A6 Xssh = paramiko.SSHClient()
! h: s3 o/ A+ R8 Kssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ Y( {' e; |% C
( z0 Q% M7 f1 g) c8 B& qssh.connect('hostname', port=22, username='username', password='password')7 {" x2 Y* F+ m$ P/ a" O/ T
9 W5 x2 ]) H3 c% E0 j, n, x+ o
sftp = ssh.open_sftp()' r# y' z* m0 n# }. J
2 A9 l. T2 P3 c1 B
sftp.put('local_file_path', 'remote_file_path'). w u: ? v/ s& o( _. [* F5 ?! v
sftp.get('remote_file_path', 'local_file_path')
9 c$ I3 i9 V3 ~2 S) _* B* n" S, G( ]: e% X* t7 v" k2 o
files = sftp.listdir('directory_path')0 ?5 \2 G6 d% _( W+ X, A: P$ L
3 T* U7 Y+ d( O- [sftp.remove('file_path')
% q; f; E9 h, p" ?
! R e9 Z5 t1 d! s9 gsftp.close()( l4 ?7 d( O. x( h3 R2 _! z6 o, R" ]
ssh.close()4 h# P3 R* w( H' W5 k
$ y5 i" Y4 g: d+ S
# v$ ~4 h& U j/ _: ~" d7 z
2 m3 Z& @1 D2 S2 R |
zan
|