- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7949 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2976
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。( Y' h5 \" i: Q' V3 `
/ G, \3 ]. L+ \% U" w8 y, ?" Q8 x) q安装paramiko库
) j* u" |1 X3 ~9 C- o首先,我们需要安装paramiko库。在命令行中执行以下命令:
+ ?+ |& X; k3 I' N% ~ j3 c" H0 ]. e( }% \5 m
pip install paramiko* T+ a! y( ?% E5 G
连接到SFTP服务器0 O- f+ S8 [; U1 o
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:: M0 m: ?+ A; r" o3 K& g
5 e& g& c5 C0 r. ?$ J7 \
import paramiko) u" n* O) u* ?; ~' ^; |, z& D
2 `- w- r$ w( A0 V+ L8 P
ssh = paramiko.SSHClient()
; `0 C5 g! d7 X4 v
8 v1 T! g6 R) j. q+ T然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
, U5 r+ [: Y! [0 {$ I- m+ ]
3 q* Y0 X e$ J' `# }ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())4 F3 H$ P1 d& o: D) C
: L+ }, j$ X, N
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
, R) b: C7 h* U; t; f; Q% k
* |" X+ S8 ]2 ]' e5 k% Pssh.connect('hostname', port=22, username='username', password='password')+ z1 u# I/ c7 S$ X* S3 F9 P
$ Z! {6 o& {" A1 Z# v& I) Q
创建SFTP会话8 a# K' |9 c1 Y# {: U8 A
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
3 @! a! q, i7 X& X# m# x- ^: C" Z* w' j* V
sftp = ssh.open_sftp(), ?1 k& @& v9 J) t- L$ M
) l! }: Z7 U- ]6 T- I! \上传文件
7 J# w' n! C& g. F现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:8 X4 Y" c; G) J4 Q
% n8 R& M. S2 s9 _& i7 usftp.put('local_file_path', 'remote_file_path')# ^3 V! a2 L8 \9 l& N- z0 o' k* G
4 R3 ^6 t. C2 S
下载文件
. \& `) u4 d$ d) ?) I- }除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:$ M1 Y3 C1 q2 ~0 Q/ I
" T7 ^2 l6 I7 u* A( d. Ysftp.get('remote_file_path', 'local_file_path')
9 {: n6 e, x% D5 k* o
' D- ?) i- W$ w4 g* D" D3 m1 x列出文件和目录. t B+ M: U* x i% f. ^
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:5 k8 k6 A5 }5 |9 ~4 z, O( |
% v l5 }3 O& H3 V3 @+ zfiles = sftp.listdir('directory_path')/ ^4 H1 w5 Y+ ?
3 @" |* A1 h2 F- R1 c) R3 W删除文件! Z3 n3 u5 u' b ?9 R
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
) w5 Q) Y& ]0 k; W# I3 S, W6 N
* i4 D0 [7 S1 z8 Rsftp.remove('file_path')4 @7 A5 D* A @: k' X6 p
& I% l) ?# w! ]9 t: V关闭SFTP会话和SSH连接! J/ C4 l, [2 L0 T {! o6 u
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:* O' p2 A3 W# X( h' j! {& }
- J2 {/ I3 J4 R: ^- X0 vsftp.close()
9 H- S B) O. N9 k( i6 }: rssh.close(). \1 p! q7 Q6 J6 K/ ?3 O0 F
4 e6 ]7 t7 h' @ Y6 l9 {
完整示例% i9 Z( e# ~& G$ A; n
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:& J k4 J" n, \* ^$ b8 P5 U
5 Y: a: g7 r' t9 p7 y7 g: `* Y( w% `import paramiko
- q. y+ F/ z1 F7 T7 H8 T
0 K$ J8 h+ F. D# J9 c \% C4 fssh = paramiko.SSHClient()& { |9 f P: }& J# i
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())* D0 ?) I" e! V$ X% p: l7 n5 d
! ^- w3 h6 z+ n3 g9 M0 R2 Y% r/ _
ssh.connect('hostname', port=22, username='username', password='password')1 p# u7 ^2 \/ v* j( O0 g
1 ]4 h# u* r( l
sftp = ssh.open_sftp()! E: Y; w4 X) r; q* N* v8 G
s2 r5 l- B7 H0 R* Z1 }
sftp.put('local_file_path', 'remote_file_path')4 c2 F- N9 w7 Z1 @8 H4 C
sftp.get('remote_file_path', 'local_file_path')6 C; E: x7 s) B
! O: u4 a+ o, J n$ ?; f! `, j7 T- \6 y. tfiles = sftp.listdir('directory_path')
S. b* X* s7 w* d, y# W1 B6 t6 v8 x$ ]4 o% |! e
sftp.remove('file_path')" Q% J: x' E1 L9 R$ V
; K& H6 |2 l6 H' @sftp.close()
. P/ Y5 L. b4 \; |5 Z* Nssh.close(): V/ A, k! [. B( i7 I% B
9 F) M6 D2 @- C1 M
0 }( e A) R N y: }
8 C/ K4 V) o' M) g |
zan
|