- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。0 o+ q6 y% z% s. F: M( b8 ^
, n2 R) [4 L4 b: I7 `5 d1 |
安装paramiko库
& i6 i4 r4 t. j& j ~) i首先,我们需要安装paramiko库。在命令行中执行以下命令:
3 u# L6 L& ^9 }; L6 _1 o0 @6 }0 a3 p0 x0 K
pip install paramiko, S# M7 i/ @" F
连接到SFTP服务器+ _% e$ U& Y7 r, G
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:0 {) z+ c+ }- P
/ K* @! s( N+ r4 i5 J
import paramiko7 o+ C: y, e2 y$ u. b; h# D
% H+ ~* l+ N+ T) G3 |! c/ c! L. M6 X
ssh = paramiko.SSHClient()) x; w5 s5 s1 p7 o
* c* w9 {; Y0 z
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:$ i( v9 h! w4 n4 V
# L0 {6 ?" F5 H4 @: P+ ~ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())3 ]7 x9 w% T4 r7 ^+ `& A4 Y2 S! P, f
, x: O5 S& E) s. Q) M; l: i
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:5 \4 W6 Z2 A! u( v6 U+ s
) U6 z9 N0 o( t9 D/ |ssh.connect('hostname', port=22, username='username', password='password')
* G% V2 e6 D) b" K( v) R5 r, v
+ L) E2 @6 c& l& [创建SFTP会话
- n3 k% O, f6 i成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
/ h( o6 W6 C) `
* h( L, ?. F. S& vsftp = ssh.open_sftp()
+ I3 X' |1 p& F3 _8 b* r6 C9 N7 f
/ X( C; D- A1 `4 ]上传文件
/ V/ m5 v2 Y5 O! ^+ Y现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:2 p0 U( V4 U" O% u* ~
$ p( U8 ~9 J" x U" a) H
sftp.put('local_file_path', 'remote_file_path')4 T: k- L2 r2 ~0 u5 i4 w
$ }. _& U% u [ i, m/ d4 V$ ~下载文件
4 j( U. d+ L' Q- y9 Q. V2 h- p除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:- Q' m$ E; a* w7 ~
# d: J3 j* @) b# `
sftp.get('remote_file_path', 'local_file_path')
, c* X" ~8 t$ }3 `4 y, }3 E' r& ^# C+ p; e$ S
列出文件和目录2 k: ~! g! H; s0 E* Y3 b
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:+ y' q& y' F- z- e1 P; i& y- h
! ?( w8 {; Y: H5 h
files = sftp.listdir('directory_path')
# w( A; d8 b0 M1 X9 E, z3 G5 l% @* R9 x3 P2 u5 v2 E: g! T
删除文件; v7 d- r9 c- g5 \' c3 b
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:; U- z: Q, w T
8 `7 {2 A; {, B! j. ^! p4 U+ ]
sftp.remove('file_path')6 [+ j, A: n! U
( t% x1 A# j& ~& E+ x8 `
关闭SFTP会话和SSH连接
) o5 v6 b) O% x7 p完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
3 v' f8 ~5 w! N( N _2 Q! U: Q! E* j
sftp.close()
2 W: ?1 f4 o; q7 E: issh.close()
) t! a1 W: W4 ~4 r4 l" K `! x# V- i/ A
完整示例
6 Y$ R5 \- ^1 r9 Z* s5 ^' v下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
2 e$ R9 {, Y* w& h
0 T: T0 ?* i2 T8 _/ Uimport paramiko/ ~$ H' f2 S- Y0 B% Y, ]2 @
4 \1 `4 a+ Q0 o: j4 q( cssh = paramiko.SSHClient()0 n9 T- W# j8 s; F
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( j2 ~8 W2 T3 |+ j# A# Y ~) ?0 O0 D3 c4 A* Q
ssh.connect('hostname', port=22, username='username', password='password')
1 t+ k5 x n7 f" P6 J
, B& Z4 P! n, r; j, {5 g* ?sftp = ssh.open_sftp()
% [1 C+ q4 E6 y% M. X# f6 f% L
sftp.put('local_file_path', 'remote_file_path')
6 o4 Q( Y) s" L; Ysftp.get('remote_file_path', 'local_file_path')
! w9 V* j$ T9 p, v: B3 t0 _0 b- i# h. N
files = sftp.listdir('directory_path')
( n+ x' T C% A1 ^# t7 j8 I1 u1 {6 `+ V) C/ r8 ^( [" ~
sftp.remove('file_path')
% t1 u2 N/ D/ z) ]" z6 c' b5 B; }6 v; S( t3 D- |
sftp.close()
3 R0 X1 z( U/ X2 Rssh.close()# C! \9 [7 p9 }, M. ?
. O: a9 A" z |& r3 Y4 A# I/ ~
* P+ K8 K: ?, p. J4 d' R
! f% J* U! p# C9 s. f8 q |
zan
|