- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
% }5 ?; E$ i6 X
* V$ s% m% W- z; S% h) B安装paramiko库
/ [+ r" o* }6 X0 n/ r# L* j首先,我们需要安装paramiko库。在命令行中执行以下命令:: A* _: V/ \. c% C) ~8 T: Q7 X
, _6 X' T! q/ r* t
pip install paramiko& ` z3 l$ P- f" O
连接到SFTP服务器
4 d% C( _ h- g! r接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
% M+ R6 O Y. F
7 z" l! u: C3 B' E" u0 `import paramiko- W( w% Q7 ^4 }5 e% ^) i
- o5 Q3 a0 ^) A( q
ssh = paramiko.SSHClient()
% `( @$ `5 X4 h% l; S: \" h- L( E. N K. J9 U7 G% _$ r
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:5 t; _& U9 t+ @% N! M l0 V
8 U- D; s; |$ w& x# X6 H+ I
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
$ ~' x, j, V5 G* b2 h% `5 L. m9 u0 B l. R6 ?9 O
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
5 [ i" q3 b+ K; j0 l+ n8 @9 \: c# ~ E5 T7 J6 A
ssh.connect('hostname', port=22, username='username', password='password')
# m$ e+ ?4 J- v0 _
# E1 \( o& M$ P+ p2 B8 r创建SFTP会话
( n. Y( e0 c; U6 j; r成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:* d; s3 D& k: Y/ r
! t9 ^- m; k2 a# k3 \' X" o
sftp = ssh.open_sftp()
7 A9 Q5 q$ D: Q3 V" p* j+ B# U9 w7 A( A) a) t
上传文件9 z6 u7 Y8 |: y+ _( F
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
+ n8 j- a" K' T6 T% \% O* b
. o7 l5 C# ^, ~- l. j3 Esftp.put('local_file_path', 'remote_file_path')" F N; g9 ^: H* |! z2 K6 L9 i
, T* p0 | q) x4 a% {
下载文件' d2 h# H5 Y& M. b
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
* @# l' C9 p! s. X$ i
1 Y+ H& h0 k5 a$ Wsftp.get('remote_file_path', 'local_file_path')
% ^! d8 `- Q% D3 D: i5 @2 _6 n# ^0 j8 V `! y6 l# T9 I+ o
列出文件和目录
* Q: h* y; B" \使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:4 x* B" H1 m+ |( o, v
5 |& f6 U# @8 l9 Z8 B/ i& V% A
files = sftp.listdir('directory_path'), ~ W5 A9 g- c
- S0 m& B) Z! G删除文件
2 _9 ^* t0 X( O2 x8 \' B; z$ J1 s使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
! r, b- M; e2 u& E" z% s
: x8 X9 S) o) j* asftp.remove('file_path')2 K" Z6 C* l4 K8 C8 z/ b5 h
Z i6 S4 P9 p+ @, s
关闭SFTP会话和SSH连接
9 \) P% E! Y6 h" x完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:# l# o ^$ g) H6 L# i' Y8 s: r, ?
* D$ F3 {4 K( ssftp.close()" H% g7 b' L; O( t4 u5 p
ssh.close()
8 [9 x M0 m3 i
, m1 x8 _! p7 S, o完整示例
9 s. d5 U4 b0 }3 ~% S9 Z下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
5 E9 [4 E7 L, }, b% D4 F+ Q; z2 M4 h8 @8 `
import paramiko
% C4 g6 k6 ~& l# s
) g5 k% ]8 F0 k# o1 p Zssh = paramiko.SSHClient()
A7 J5 Q& N$ t! b2 k6 jssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
$ I* L. D; ~* {1 h# C& d
' V! t2 V, k, T; f$ }ssh.connect('hostname', port=22, username='username', password='password')
& l$ H/ i [) b! A/ f! k& X. `1 O% I
sftp = ssh.open_sftp()+ V( m8 V6 W3 `: }% }9 ~$ ?( }; j
: j& g0 ~# d' x }# v( R, }sftp.put('local_file_path', 'remote_file_path')! k/ y2 _! h! G! Y
sftp.get('remote_file_path', 'local_file_path')
4 A/ T4 l' g N ~
1 w* i6 T4 P/ |% H3 U9 x' bfiles = sftp.listdir('directory_path')" n e7 }% g4 l3 |8 U/ H) l
$ U( r; B. P! u( f6 Dsftp.remove('file_path')7 C! t2 `3 s! x" f4 T/ ]
1 y+ w7 E- W, `4 P% h" T) Xsftp.close()
0 N- A( Y( e& s; {8 g& Kssh.close()
1 e6 q0 }. i7 V9 R, e7 {+ U7 c6 ^8 f9 q. A
- [4 _: o2 l5 f6 {
7 d+ z, i. X4 `' t2 D" p |
zan
|