数学建模社区-数学中国

标题: Python SFTP 详细使用 [打印本页]

作者: 2744557306    时间: 2024-3-21 16:20
标题: Python SFTP 详细使用
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
3 l/ S& D0 W) h( p0 Z; e" I8 d3 c6 m
安装paramiko库
* w/ k9 c& W5 |) k/ m$ d首先,我们需要安装paramiko库。在命令行中执行以下命令:6 _% V8 N* r! M, I- M% {

7 C# J, n+ I" x  W4 P5 Xpip install paramiko$ c$ P" g% Y. ~5 D: z
连接到SFTP服务器& Z$ @" b, j  k4 H+ @/ h
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:7 h% i, I( f; I) T  |  G% ~$ ^3 k5 L
0 k- x0 O. [* s! F) o6 Y6 `/ b! Z
import paramiko! C+ u& u& d0 R

. X$ [4 p) Y) ussh = paramiko.SSHClient()
( A; t! n3 n- B+ c$ ]4 e. X* u: a3 {
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
, N/ U6 T! D0 R) \* P6 w# z  t
7 R. \% s# [$ q; vssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
& K: c6 ^3 b2 j; G% ]( K
# l% j/ i" V6 P$ V接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:$ u3 b. ]/ P( t# d' Q8 w# K

4 y' k& ?- A" H+ rssh.connect('hostname', port=22, username='username', password='password')& R7 R" K8 ]- R; h. O  ]0 ?
3 J& t8 j' v: Z" v' S2 c
创建SFTP会话
8 Y! Q! U8 K' c# W% f% L7 J3 [成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:1 p5 ]' L: U/ k* U8 m6 p! y0 V
& D$ D( L8 y8 d: @  y) O
sftp = ssh.open_sftp()6 z- C2 D& k; G* f9 C

0 T5 t  s8 ]& f; Z- ~6 W上传文件
$ q# ?( W6 i7 [$ O0 A现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:- b( D; L" C# W; Z8 s
. F7 |5 ?; f+ K
sftp.put('local_file_path', 'remote_file_path')+ @) {  ^: d" j  x. j' s

" p( U/ Y% Q; t$ d7 p3 e+ N下载文件( U# f+ R, ~. V% P+ X) o
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:2 W2 [2 P3 B0 Z* f; k* Y8 U
8 S6 {" o2 p# b8 \- n# Q
sftp.get('remote_file_path', 'local_file_path')3 a- }5 Q; Z$ |) A1 s
! r. F9 C0 a0 U# X  Q2 n: p
列出文件和目录' I! @" a0 x: `: w" ?, c
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:3 G" F' }! z1 J  q, l
1 i% `" Y) o: \- P$ |& T
files = sftp.listdir('directory_path')9 h. x! c, V$ B1 @% |
% g3 _- t# E& o  C% ], A6 Z
删除文件
7 n# _8 c- f) ~% M- k使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
3 Z& W6 J% c3 C" H+ b+ _
+ _, X  N) A9 H& O4 c: esftp.remove('file_path')& }, T2 T- Y$ e, T$ `5 d+ t

- |2 O9 u; B- C关闭SFTP会话和SSH连接
8 b0 {: h$ i9 R9 u- I; e/ l  I0 U完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:: O% P7 R: V, D) B. i) K! x

+ ~/ r4 {7 E: d- x1 {0 E( Lsftp.close()
! `9 t+ L# Q; A) u% v, |$ {ssh.close()3 x. b8 g  |# e. H+ q% q7 D

- o. H( P& g# k: e完整示例# c1 S' z3 J6 @- ^
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:6 j! v& \% o) E0 D/ ^) j
5 B$ w( o6 J- U3 s' Y3 I- K. _* s
import paramiko
. l2 T1 C" E" `; b3 h" R- _* a" l
( ?* j8 N+ C. `  M/ u$ Yssh = paramiko.SSHClient()4 W( [& i" m4 A
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())& F  \( o) J- v6 h
! Q4 d: @& I- x* z7 x7 \9 F9 L8 K
ssh.connect('hostname', port=22, username='username', password='password')
' s9 g5 ]9 k1 I0 ?3 b' J
7 Q9 M4 y; e$ {4 W! p# m- F, jsftp = ssh.open_sftp()1 q- q# F# ]; D' U2 W
5 ]1 E/ X. Q" I9 @; L
sftp.put('local_file_path', 'remote_file_path')2 L, a% n/ o$ @# f2 Y; J, P
sftp.get('remote_file_path', 'local_file_path')
/ [& h8 O/ Z7 |8 V" \$ ]" \
5 e; H# R/ v: C% H4 i" yfiles = sftp.listdir('directory_path')& @+ u$ U- E, H5 O
( w5 U" v' O4 Q4 T( L; i) k6 l
sftp.remove('file_path')
5 i2 F0 t: w- Z$ Q4 [
& u: I# k' D6 y. v# ~( zsftp.close()
# X8 U  b# G+ k& ?7 |ssh.close()8 e, T( w. G% X2 O" i
' f* Y% J$ b- C

3 T, ?% ^$ y5 ?% C0 R
. r/ e+ Q# h% b5 [




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5