- 在线时间
- 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操作。% r/ G& x* v% K( _8 A& O
8 _' d( x- }$ K- S1 l
安装paramiko库
% k; Q! Q, G/ ]0 m首先,我们需要安装paramiko库。在命令行中执行以下命令:
. h5 I2 X. o ?3 W3 d
8 d G3 ~; A0 j' E* E. P5 `pip install paramiko
9 ^4 u6 C1 ^9 S8 L" s+ G& F$ [/ S连接到SFTP服务器
) F: V7 Z" K2 A# w, g1 i0 Z; o% d ]接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:9 D9 C6 U1 C6 V. ~) x( I; R
! B- `9 c( a0 f: r
import paramiko
* A3 C" m v8 ]) h2 q
4 ]8 N1 E; }1 g# b' u# j; qssh = paramiko.SSHClient()0 V' n2 _$ ~; r$ M
/ k% k2 l, P0 C/ W5 G( O3 L
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:7 t8 K1 z# E2 S" {
+ Q" T% N, j; Z( j# d% w* tssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()); ]- D( {- {6 H
3 u, y1 D2 M# q4 `8 O" T
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
# L& z. ?# F) |8 \4 F) s! E- T8 k2 q. W! w
ssh.connect('hostname', port=22, username='username', password='password'), a9 \ b9 P, g# I+ S/ K5 ~
7 N* v4 ]* C/ {: L" O1 S7 F
创建SFTP会话: Q3 M8 Y8 @" ~
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:+ {7 X7 f6 p! _5 T& a! q) C
) N# S3 a: P% E$ c9 K! Ssftp = ssh.open_sftp()) ]; P) A8 b. }
& ~0 H' P* k5 J6 ?0 k! W
上传文件
9 ^8 p% Y7 W& p6 N/ {6 y' F/ ^现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
A8 l- B; l, E; p7 R2 S/ ^" i0 u2 [( Y. A8 O3 V
sftp.put('local_file_path', 'remote_file_path')
2 H1 K. } b) j! I! k z5 M7 e2 ]8 V: x+ L% v" \+ h
下载文件
, E: q( o# u( \/ M4 o6 W" A- f& e除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
4 ^8 ^6 Q4 i) A4 O. }! x0 v9 A ]& v3 U" ~7 C6 m
sftp.get('remote_file_path', 'local_file_path')
+ F5 A; D+ u# f: s5 b# S5 v u! A# \2 e
列出文件和目录$ b# q- S$ o+ L( m, K' o
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
8 Y" `8 _8 {' t- c5 A( z1 l' h$ d. S5 D8 r8 y4 n }" _9 P2 Q. S
files = sftp.listdir('directory_path')3 B" K$ `6 d" T. e
+ J6 i7 {1 \7 d A$ j, F
删除文件
; I: V2 n- d$ ^3 L5 A使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:# S% ^" t0 _: {9 i9 Z( G
7 c* s' ~5 a4 b j+ ?' a9 F% Psftp.remove('file_path')
- [3 {! Q3 p7 C6 r2 x% N2 `7 J4 ^9 G* W* i6 Y. [
关闭SFTP会话和SSH连接
6 U* n' ?% l$ x完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
) K, M; y" |' ^1 O
5 l1 q% O6 m9 ]7 {- m4 l8 P; Xsftp.close()
" R( w& f$ f/ m' h+ z1 W3 G6 n. Nssh.close()
0 R; |" c% Q0 r- Y6 e/ v4 \- L6 Q' I% d& i, Q
完整示例
& u# f5 D6 ~) s+ p% z下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:& m% n) r, A5 E; F4 T% p
c. Q) Q' I b8 w; x
import paramiko
6 @% X5 O# V" N* M* \8 N6 ^5 D0 h, q3 w0 k9 ]" o5 M% n+ h7 D
ssh = paramiko.SSHClient(); m" b6 H9 r3 j) W) r' K
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( |5 N4 s% J9 y% i/ l( `+ f' q
' z" j* E1 ^8 W0 Sssh.connect('hostname', port=22, username='username', password='password')
! V- Y: S1 Z: _5 w' f: E6 ~* k- W3 Y) ~0 Q: X+ y0 M
sftp = ssh.open_sftp()4 t' o7 d7 X; C* E1 n
/ s- U7 C2 `- J5 P, ~
sftp.put('local_file_path', 'remote_file_path')- p" d6 c4 @ ]$ n& H' n
sftp.get('remote_file_path', 'local_file_path')
$ ^+ p7 V4 g! H5 Q, s, n$ t; t% l, |9 d! Z
files = sftp.listdir('directory_path')
$ z9 D$ [9 ^) p4 V' d+ ^' ~3 `) y8 b5 h: A2 G5 {0 m4 w1 e. l C
sftp.remove('file_path')6 U, @, S( \! c$ ~# R
" U1 O9 z% C+ S, u$ f: Z
sftp.close()! V# f7 p4 _0 f3 S
ssh.close()
. k% V& t" T) k9 v, Q9 @/ q2 N0 a4 O L- z3 x* `& }) Z
! c! P) t7 A! L2 a9 o
+ ~1 B" U% d" K! p5 F# C% a4 ]7 O6 j
|
zan
|