- 在线时间
- 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操作。
% l2 D% M" ~1 o& b. t3 p" g! l. Y: T3 B/ t! @7 d* n
安装paramiko库
! S' B* x9 {, ^1 Q首先,我们需要安装paramiko库。在命令行中执行以下命令:
; F- Z3 \5 M* Q; }9 J M! s! d2 c2 s, @7 t# j+ \
pip install paramiko$ H- t* J: s' R, G. ~: |
连接到SFTP服务器
" w) J, D' ~7 Q& C9 C4 T6 V! b% J& D接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:: q" T/ y8 ^- v0 F9 y5 w% r- i6 z
- m- m) ?0 P: p
import paramiko
( }/ {1 h0 o8 J$ h: L$ e
* y1 j( C' M" u0 ~2 fssh = paramiko.SSHClient()
" W4 e0 G! m6 d; R6 q0 m6 v, G( N" q
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
+ o6 l" y2 z$ z+ b) s$ u+ @% j- e8 d# d( O" i
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
1 \0 h& s$ |/ R0 t. Z1 u
! q/ ]/ L: I' M, [* R) k4 v接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
$ X! q* d( z. X( @; A0 P. z
: O/ `2 w0 d0 O5 Pssh.connect('hostname', port=22, username='username', password='password')4 R6 [! ]' H/ r! k7 _: y
9 K* x! {* @, D8 ^* a S
创建SFTP会话- W; \! V+ [# q; ]2 o/ O
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:, `7 ?- z h0 B# O8 k
: ]! `; ]5 [2 U* Csftp = ssh.open_sftp()* ~/ Z- z: I/ t
% {5 k+ O2 R8 u0 {0 I
上传文件
' b) o3 i# I [( S3 Z" X. g, [. M现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
& H+ D. S2 R" K( Z+ r$ M" q7 t$ }, H5 l3 q$ k6 X
sftp.put('local_file_path', 'remote_file_path')
i+ c# a7 u' L* t7 y Z5 } U3 C" E: k
下载文件' h" G* C4 ]+ e. A0 s
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
# U* D) q! R" y7 R9 U/ I/ \+ Y# [" s
; H: E# v) `2 S5 f5 J a# ssftp.get('remote_file_path', 'local_file_path')
7 S5 v+ d1 \0 i. C, d) t. U+ G
# P# s/ i: U7 W列出文件和目录) |* A3 C2 Y! [% A
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:5 c. Z( E9 v1 g0 L0 W' B7 p, D$ Y
* I4 @5 G; o* |1 R' |* Q& ?0 bfiles = sftp.listdir('directory_path')2 I) r6 @* P. M t" I
( \& h: X; J5 m, T/ ?) S删除文件/ M6 g2 f/ T* b8 L
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
, s3 D+ x& L( ?' q6 B9 x# O0 r0 @
- r; k( M/ w- f, t+ G7 Jsftp.remove('file_path')
8 ^6 Y4 _' i" s1 D+ F8 V
1 S% b( u' d+ K. {关闭SFTP会话和SSH连接
+ a6 l$ m+ q5 x+ h X% ~. `8 P完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
( @4 Y% }. ]2 ? o" Z
% k1 w S* ]& P$ [! jsftp.close()
5 Y0 G3 o6 q/ L Yssh.close()
* A: K& o: [, _5 ~: z l" T- u
7 R# L+ f: ^) c3 Z( Z9 n( v完整示例, {! p! I7 O: \, }& y+ e
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:1 }" l3 {% o$ r7 @; d0 j! V
+ d5 T0 U* u n' r" jimport paramiko6 T4 q6 C9 G- b" ~3 @# _ Q! |
$ S* h8 ?& m! G: U* g: L! a6 }: u, J
ssh = paramiko.SSHClient()
4 G, s; H z, pssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())- ^: |* f9 b3 M. U8 y3 N& C: h9 Q. q
8 m, \$ {" o) g0 {$ B
ssh.connect('hostname', port=22, username='username', password='password')
% _. Y6 J- W! O! M7 X1 M8 {
# W3 B- u; r' @6 Msftp = ssh.open_sftp()
0 b4 G) }. u0 U
7 j0 _0 T1 ]7 t V" lsftp.put('local_file_path', 'remote_file_path') y. ?5 _% [6 p$ F! K
sftp.get('remote_file_path', 'local_file_path')
( T: a' N- i) f7 @% ^+ i6 S7 P7 X) @ X2 g' M
files = sftp.listdir('directory_path')/ K" K9 `( U. l3 X; `+ y, f2 F
6 W& q5 n5 F0 o- W" o2 Ysftp.remove('file_path')
. k6 h- p! k* _2 _( i& p
. B7 E# s& z% L- z& F0 b' }) fsftp.close()' X3 u- _6 f$ i$ \% ?
ssh.close(). u4 d8 X/ U/ Z- ~: N3 K- ~
) P1 X- F! [. H# L7 U$ a, E
+ n. R# h, ~$ A$ P
% G$ }, c) a Z |
zan
|