- 在线时间
- 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操作。
$ V; b9 T- S$ d( f9 `/ L" {9 J' r" o c. e5 l
安装paramiko库
+ N$ X: b: V. f* `* u5 [首先,我们需要安装paramiko库。在命令行中执行以下命令:
+ j" y" f! L. a
5 X2 A9 Q+ ^4 C: Kpip install paramiko7 r' o2 C' n" H( @# ]
连接到SFTP服务器# p, J# F; d/ [" Y3 Q+ O/ I- o
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
' w( Y) A- y$ E; S7 z" m8 N6 C2 g0 N7 h+ J5 h7 d( W9 w
import paramiko
' o6 f7 M0 p6 T. W2 K3 n g4 E- b7 j
ssh = paramiko.SSHClient()
% q6 d6 y/ |2 R) }- G
. u, L8 w" U' W( m6 b) e+ ~然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
) r: Z: z9 F$ c% ^# `8 h6 {0 n+ ~+ i. v5 o
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())6 B& S3 U2 v8 @0 d
8 D* O+ \+ E4 A3 y1 e接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:* \) r( g; c% T% F7 y" Y( Q
- _0 P0 o8 g, ^2 yssh.connect('hostname', port=22, username='username', password='password')3 ?. i* H, z5 w" ^5 }# D( J r1 E
; w2 j3 K5 M* [' R" R1 m/ a创建SFTP会话% u. y1 ^/ E/ m; v, i# ]$ B
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
4 ?% }5 H. ~2 Y0 U) w& ^5 k- P! }( N
* O8 A* g& L( k# l8 tsftp = ssh.open_sftp()
8 h* ~* b. E* h( n! Z' ~, l! @# y9 R% g6 S# z8 j
上传文件& h8 n& J4 a! n8 p" \4 y0 m
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:. D$ [$ x- ^$ E* {; Y; N' b5 p# c
( {9 I p- W `: asftp.put('local_file_path', 'remote_file_path')
8 R" z* }! t4 w0 F! B* I. m9 M8 W% q" r4 d/ V- ^& ~( Z% z4 n5 z
下载文件+ `8 J" k7 _/ ?2 c1 j" `+ y& Z
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:2 k" i _2 f3 T
7 j, w9 k% t7 \7 R5 zsftp.get('remote_file_path', 'local_file_path')
6 [7 {" _3 Z; o+ f* G
5 V8 P! @( \/ [ i, K; o列出文件和目录& F; Q, G X9 V; C+ S
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:2 E0 f7 k8 ?$ \: [) s
9 g4 |- |7 J4 T
files = sftp.listdir('directory_path')$ L+ V) x% |1 ~' z3 y' b) M' `
$ ]! G! H# A( @, a/ d/ _. R9 X删除文件
0 x) ^3 } Z. r$ T) v使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
) }7 }$ C6 l$ q$ C1 A% z/ A; ^" ]8 I! t0 w5 G
sftp.remove('file_path')" @6 h+ Y+ K( ?7 s
$ m" v$ v0 k" d* c5 X. [1 f* D9 M7 I
关闭SFTP会话和SSH连接1 W3 {/ |% z% x7 v; b' E7 @
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:+ p3 ~# h8 w; X- I( M7 H
. h! J; k' C# m
sftp.close()
# R9 w$ u/ S6 g: ~1 q# f- Xssh.close()
$ W/ T& J% D+ Y$ z ~. X+ C! F$ V8 @; B% r: @
完整示例
& w6 M2 |6 {! W1 g, x* q下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:4 M+ H3 c1 W/ s( b( l. B( B
% m# \3 L6 a/ j. W4 a3 l: U
import paramiko
, Z0 y, a3 \4 H) x5 w3 c/ {# ]/ _7 C" x* o% a# t& \7 v- \9 o5 z
ssh = paramiko.SSHClient(). ?, n8 c* N9 ]3 X; A4 o: p- f- @
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())9 A) b* d# v) R( s
" Y0 T4 R N1 N5 a; c) R6 f/ Qssh.connect('hostname', port=22, username='username', password='password'); B9 O3 r- H3 \. K; {' h
* [, E% ~, P( _" r: {8 a0 vsftp = ssh.open_sftp()6 S6 o# o+ O, B2 h' |
1 E% o9 l' X6 {+ R h: W0 ~3 vsftp.put('local_file_path', 'remote_file_path')
3 \5 D6 X- S& M6 a8 `sftp.get('remote_file_path', 'local_file_path')
" k# ?( _* {1 D) e/ T! u/ H2 |9 b7 p# @
files = sftp.listdir('directory_path')
# Q" V3 Q; D$ [7 G% p
/ R- q) ?7 ]& j/ c* j0 X: isftp.remove('file_path')
) I- S3 ]/ l7 C* d6 ~& \
: Z! }5 ^& L/ t5 Ssftp.close()
1 F. Z! \1 s3 k. ?: M: L0 }( i U2 }ssh.close()
! C+ p8 P! n2 }5 |. ]/ v; T# [5 Z% T( U6 Y, `
4 Z: N7 L1 d! b" W' h
! w& A6 G9 C6 l. r |
zan
|