- 在线时间
- 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操作。
* M( b9 z! B0 \( o' I, z; R8 M, M
安装paramiko库7 K" y, l9 x1 {2 i$ U* |0 F
首先,我们需要安装paramiko库。在命令行中执行以下命令:( {* D& ]7 Y0 R! }
5 l6 P% D% y) p+ m3 R. I z" w5 M
pip install paramiko
& s& y6 R; |4 _0 w6 w+ I( }连接到SFTP服务器
& o9 X% l& W2 ]7 X3 \& r接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:' K# `0 Y& t; z
7 v2 l( Z' ^& K" Y
import paramiko1 l' L' N( B$ U! u5 @; O
& d2 z) X8 A0 x- {+ b$ u0 J D
ssh = paramiko.SSHClient()
# ?8 v. u& z* r5 ~$ W) v+ H5 q
: B2 R! H$ S9 e# _/ w& j! A然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:5 S- T* M+ s# j/ c- B
1 j8 Z$ s% ?0 T/ yssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()): w0 e z- H6 W; u5 t
[$ a& I# M4 [6 P
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码: E" B5 B6 A3 p- x0 y2 V
0 Z% ]8 T6 F" I. G& s: ?ssh.connect('hostname', port=22, username='username', password='password')
; Z% a6 n! {; I+ \$ R* x
5 \) N! Q" ]+ m5 L% M; ^% p创建SFTP会话( V- y4 E! t2 g3 I; n3 B, D
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:& B! V$ r; q$ x
9 b6 k. W( U# n% a
sftp = ssh.open_sftp()
5 U1 y! z. [* H1 M9 k6 B( ]- H( x: D# D* u0 @% d9 Y3 x. }
上传文件
& y. Y# S6 X! H, q2 L* f; u* E现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:( ?2 R" e* A5 O* M
! ~& Y7 }) a9 N6 e' F7 j1 Fsftp.put('local_file_path', 'remote_file_path'), f1 D# F3 f* J, K0 c
4 l1 u. [9 A, c下载文件; q9 D6 C# W' s8 M5 d
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:7 A9 n+ u/ F& @4 u: {# b
6 I0 M8 O3 s* l8 ~( V
sftp.get('remote_file_path', 'local_file_path')
, C- p b$ a8 t
' G) f( j/ N+ H列出文件和目录
2 K6 s2 j* y9 W: W使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
/ W1 d9 X% K7 a1 U) J/ g9 M. u6 X+ `! j
files = sftp.listdir('directory_path')5 T% v) B4 _ B
5 ~; ^* ^' \8 e% C. \6 V* h
删除文件( `! |8 x. v5 E: ]8 @
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
. M: n& C7 L' R
) C4 S% [8 H0 v% n& Q; q) Asftp.remove('file_path')
+ |* t! q+ ?6 D" r; _" x- g, @2 l8 q+ \" n- t; S
关闭SFTP会话和SSH连接+ ]- f7 S2 `8 v
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:$ K- c5 w6 e0 B3 b/ Y( c
7 B! C5 s+ _) C8 u$ o5 Usftp.close()0 Z( Y( w, x& V$ _& }! d
ssh.close()% q) o" v' J' r9 G5 P! X- @8 y/ y
" X5 r+ S" \2 C! ?完整示例: s3 c$ K, X5 L& J% r1 O* V m
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:& T( g4 }" h5 x" O% ~3 q" b; r
2 @+ G B6 }: O% T0 O& n
import paramiko; J- Q2 D* h3 G n% B
) F5 r& j5 Q( G# W; ~
ssh = paramiko.SSHClient()% \( w+ I9 f, H+ o5 i- |, X @* j) P* v
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())& q& e+ e! d/ f5 g
7 q$ S- q0 O0 ` i5 c q8 a7 }! u" mssh.connect('hostname', port=22, username='username', password='password'); f* G1 o% ~) X, x E' z7 t
: I0 Y* c) ]3 z J
sftp = ssh.open_sftp(). W4 z$ y% E5 v5 r& W9 V
; n5 @ ^* M& jsftp.put('local_file_path', 'remote_file_path')
c2 z" t, s; ~. @" lsftp.get('remote_file_path', 'local_file_path')8 s I7 W+ |: S( `3 r* {
1 H5 o$ s) {0 A; o8 L) t: zfiles = sftp.listdir('directory_path')0 L2 P8 b! M$ ]5 a& e+ {
: J9 O2 w1 y! G; A3 Z4 l. B
sftp.remove('file_path')
' P3 [+ e' t/ h$ }- I) A
R l9 v; x0 [$ a$ X2 qsftp.close()1 r( P2 g. t3 b: z/ {8 F4 d# z
ssh.close()
- c1 T% k! L2 X6 K/ m6 N
. j2 X0 ]% S: K+ R- b* c
; E" z' U1 u' y) u* `( G4 V. }; [; f9 C% ]* G% {6 C
|
zan
|