- 在线时间
- 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操作。: Y; q( f8 o* {, h/ i
$ l1 `. _) Z7 X, h( L
安装paramiko库) C7 t+ k# \- L, `; t Q
首先,我们需要安装paramiko库。在命令行中执行以下命令:
: Z( X* ~2 I2 H/ V# O
8 e7 |; s: }; m# {; q2 G7 f! xpip install paramiko
7 t) P$ Z7 ^9 W' o B9 P连接到SFTP服务器1 f" x) |7 v; H" V1 c" d/ h" c/ P
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
( H! M8 Y8 I% {7 [% ]* x
( b& i* m! D# r9 n1 S2 C7 kimport paramiko
{0 a% a2 Z1 R7 K
: `( Y! w; g" J$ X' u+ yssh = paramiko.SSHClient()- K& t- M% Y1 o9 ?
/ q% f0 ~) y7 K! } }1 _然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:. _( t" O" e+ r' ^
6 f% M, z, k% J, a3 T+ W# x K# yssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
4 U2 |* H' v) ]; Z F( @
7 j ?, F4 h, }$ b7 u( e7 u- H接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
) o. W: m& ?4 I( @4 @; h5 w
( m6 ~3 y7 p6 A& W+ W) d4 [ssh.connect('hostname', port=22, username='username', password='password')
6 M4 }' V! j+ L9 n# w- |! Z, J; ?9 P3 }! \+ F
创建SFTP会话: j! k# w! q7 h* z
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
& L+ H6 G p+ g- J5 v# C& q- U. s& D: U( v/ u5 l# @4 D
sftp = ssh.open_sftp()- M- A$ Y' g$ o8 a$ P- T
; J) f% c8 D6 K% D5 M上传文件
9 r* O1 o) J( k& Y# K现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:6 Y$ K* ?; D% m* X( I- V3 q( \& D
! w2 D! [$ D6 h# `
sftp.put('local_file_path', 'remote_file_path')" U7 ]$ r+ T& Y4 t
* p2 ~" w$ y, Z! Z* M/ ?
下载文件 p# x5 s. n$ Z* W, M3 E. T
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
6 L, J5 p- j" |# P
! j. f4 p, h' ?4 U) z$ m nsftp.get('remote_file_path', 'local_file_path')' Q7 j& P4 o6 m2 I/ f: f/ `
, G8 e" {' P" V& A
列出文件和目录
& N+ w$ p$ V; Y+ i使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
9 |8 \' u% E4 _& W& g$ \' T) D5 k+ m$ a/ j
files = sftp.listdir('directory_path')2 e# }4 ?5 l- `" q- f6 H2 L/ _7 J/ s
p6 f4 I. M' v' ^- ?& x4 K
删除文件
. b4 q# |8 L) y5 \7 G6 H7 {1 O- B# n使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
) h( n, K; f7 V! x ~! m
+ l1 l: e( E# ~" T: c4 L; ^( \sftp.remove('file_path')
9 L# E! h) j* j% G9 p" b$ |2 _) a/ Z2 j$ M, s1 ?: B9 ]) t
关闭SFTP会话和SSH连接3 q( K2 S: a2 Q0 C# ~
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:: ], D% I# @$ @9 [) s/ @
) T+ O3 T7 u9 B0 M0 c1 qsftp.close()' U$ q, [4 h9 B" n% o1 L
ssh.close()* y$ [ p$ o. B7 z
# m" }" ?5 `: b9 ?% h0 k: I6 t$ X
完整示例0 J' q5 y Q4 V6 k% `7 g
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
; j* V+ e% D, z9 ^: u+ @. U& l5 l q& g I: p! X
import paramiko7 h3 p1 ^: A: D6 Q- v
1 `6 l7 k! h: S: E/ Cssh = paramiko.SSHClient()
0 n( ?) V; `# j5 O8 `" |ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
4 l. k- v/ u4 z, q) H3 M; p$ c
. m+ H7 N& J+ O0 H$ W. q4 Gssh.connect('hostname', port=22, username='username', password='password')9 C: |# ]5 b% `0 Y' C: @
1 {+ g: s$ _: t
sftp = ssh.open_sftp()
& A5 `' M% l( h# F: b
% u2 q: O1 c* a, ^' V4 V. `! Z! x( `sftp.put('local_file_path', 'remote_file_path'). W; g) w# B, D
sftp.get('remote_file_path', 'local_file_path'), V1 v" p! [5 b% \- {' m% A: b
1 h; c! j( Y" Zfiles = sftp.listdir('directory_path')
3 b% A1 B: M* Y& e6 A% w4 [: r2 `( b) o$ C
sftp.remove('file_path')$ ]2 E8 v2 K c* F, S( R+ V0 `
- w) j( p# Z$ g7 l8 s. v
sftp.close()+ G" R6 o$ ~ K0 U! N, L1 w
ssh.close()
& K; j& \3 l) X. u v
3 X! O# y& `' E- E3 N" A3 d. r; X$ U! v o/ a
* O- j2 ?8 i0 R1 x0 |% F |
zan
|