- 在线时间
- 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操作。. D9 y M7 ]( n* k5 N/ h5 C/ n: k
; J6 s, A5 j0 w: S4 `安装paramiko库: u" t$ {! A- x: J, K- _' o6 c
首先,我们需要安装paramiko库。在命令行中执行以下命令:
* \# ^0 M. R {# \9 B' [, c
5 ?& L) A- S" G+ `! E Cpip install paramiko! k* p% ~% ]5 v4 @
连接到SFTP服务器# S5 a0 y; k; T5 P, q
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
7 S8 w. i( W4 W/ `1 d& N8 b' _! X3 c; D) e; w/ B0 T/ Z
import paramiko
* m: I- V8 O# p$ j1 w
) t. E; W- [) ~6 sssh = paramiko.SSHClient()
+ J9 D+ N/ `, l
9 E, o( h7 d2 Q9 E然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:5 g& E3 `0 D. h$ x+ Z' @
|7 z3 S* c$ a' s2 ~
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
6 Y6 \& V$ i1 b, l
/ n# D( M2 }* A' n) e* `接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:9 o$ V1 ]6 S' i3 U+ `
+ X: G( Y! y/ C* m/ S$ qssh.connect('hostname', port=22, username='username', password='password')/ o# \* G# X w- r5 X# A
% @1 u- r; q. q6 X
创建SFTP会话* P5 T( T0 s8 f6 }; L; |, h
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
) d# `# I8 i. M& Q) p% S9 {5 k3 @) Z& w
sftp = ssh.open_sftp()9 A, m; j0 M$ w) p
( g6 {$ B" J" U! E1 ]
上传文件
" ]: C- \7 X" G# I- B- y, `( _& L# K8 u5 [现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径: }1 j. |3 L1 ~8 T; S2 ~- c q: {
+ G* u: {4 O; u) {6 g- wsftp.put('local_file_path', 'remote_file_path')- H( n4 x. A+ `( W
3 ?7 Z4 D q/ e' r* ]% H' L下载文件
) m7 \3 d* I" Y2 g2 R1 K' S除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
6 Q1 A* a% i6 z& {+ u! Z& @! j1 F1 e$ ?# ~: N# a
sftp.get('remote_file_path', 'local_file_path')3 z) E( t& i! T/ S( y
( V3 h+ V# d P+ _/ Z: Z列出文件和目录
" O7 z. E; y1 v1 D# R4 [使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
" B! S3 Q# s# j9 `2 o; ^* p! p* }
- f6 @: D0 i8 q8 @2 [9 Ufiles = sftp.listdir('directory_path')
% q9 j" f3 h A( }& f& \
9 T3 p/ }2 ?" g, b删除文件7 u; k' _# e$ ]
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:! ]$ j/ Z; P% b( f$ m8 ]5 O; z
8 c+ k' y& x$ s. ]) P+ H j& d. Asftp.remove('file_path')) n* b" [$ k7 q Q
/ e9 R+ q4 b& H: v y关闭SFTP会话和SSH连接
! y; h( {$ ~9 e5 K8 b完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:% `3 X( g: r) w4 t- c0 T/ Q
9 \& L/ e# f8 P8 I2 Z; P' l9 |sftp.close()1 `% p$ F) p) x/ R7 `! Y
ssh.close()
- v& m ^; W4 r9 \! f$ d5 k
" g, }2 _' l3 W8 ^. z: o. `完整示例' _1 t3 U5 p! G& D+ \: L; D+ ]
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
) {: Y0 A+ X5 O% X, Q! |+ i" J- O8 C# K: v! c( `
import paramiko3 T* j w% L, k) A6 H3 x5 U* Z* p
# X& a7 W$ b6 U! ?9 U: P$ r7 Z9 d
ssh = paramiko.SSHClient()( d. y% u2 t# M6 X9 A) @( u
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())2 j, I' `; w, T6 s) v H4 a- I. X
' l" r4 s3 k: y! z" `
ssh.connect('hostname', port=22, username='username', password='password')
* `2 w# H. i1 E3 |$ }' y8 U7 v3 z
4 R# q5 a% T8 u! |, k6 ^+ E# P* ?2 Dsftp = ssh.open_sftp()
, [3 D- Z/ @+ U' c3 |8 ~6 O& W `% k, W8 t
sftp.put('local_file_path', 'remote_file_path')
5 u8 Z6 q& d; Qsftp.get('remote_file_path', 'local_file_path')+ a( h7 {" T# F; {# `
5 ?* ~6 N6 i/ q4 Q: Ffiles = sftp.listdir('directory_path')$ w q% V* o. f0 i: V7 }5 L
, R" @: }! G: Qsftp.remove('file_path')
9 p$ L H$ i, G& {6 \% n }6 R. y) ?
sftp.close(); A, g; |0 @$ G* V! L& W
ssh.close()
7 I% I: L0 y. z% \8 ~& O$ ] h( s3 v0 v! i1 W' ^& L
e+ ^% A* y0 c; J
6 ~# k% d7 V: |- v+ ] |
zan
|