数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-21 16:20
标题: Python SFTP 详细使用
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
8 E( Z( u' L; S
& P$ z, u- @0 ^$ y安装paramiko库: n: j3 A4 [( o& v- P$ q* o/ h
首先,我们需要安装paramiko库。在命令行中执行以下命令:2 {% {; ?( j, u0 r! |7 W: M0 {
4 f  h* z7 h; x/ @
pip install paramiko* P  W/ J# T# P6 @- P
连接到SFTP服务器
# k& y; l+ q: G: _& ]" V, Y. I接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:" e# J7 O0 f7 t" }& W3 l
( b) E% @4 {: z: d
import paramiko
" q8 b0 d0 L) H# e4 f$ A- j# f0 v- ~
  f$ T6 T% A# C! ^ssh = paramiko.SSHClient()
1 H5 G: L0 g2 l: `1 y, l! a# P4 v8 s( W8 f$ V+ Z# o* Q
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:# `3 W5 I, n; o" @5 ]) E
2 J/ L% H9 E( e8 j
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
5 v: s2 r( A8 F. B4 H2 {$ a
% [$ H- k1 {# E" f! e6 q) u% }5 ^接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:6 `- m; B$ X, g6 v7 t+ _  G% T  J& i
2 M+ j( v0 I* j+ }4 A
ssh.connect('hostname', port=22, username='username', password='password')
( K" j4 ?1 u5 o5 n
* n7 W# i/ Z2 }9 o创建SFTP会话
; o8 `) H' y/ L# y8 P+ ]成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:( m  Y* \) N, W/ M5 }
7 _2 C/ {5 t& `( Q7 W( o- }
sftp = ssh.open_sftp()4 F0 e+ v: s/ e* G8 Z
* r, v1 z! p& z; b
上传文件  J' X+ A( ~3 r3 P% m! [' v% O2 ]
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:, q" _/ c1 |6 V+ C% @2 t, H9 c5 W
- P; }7 m) g4 v6 o3 ?7 e; u' I3 m
sftp.put('local_file_path', 'remote_file_path')
% }  X9 _- n" |9 }- x
1 \  _5 s% h. g6 y! Z7 _下载文件+ J, M( m8 d4 @8 @! }. K- W3 d
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
/ i5 s9 }. ^! ~$ D# C; \$ y; M4 {1 z0 u7 [5 z& Z
sftp.get('remote_file_path', 'local_file_path')2 \% J) ]0 r# m3 L. G) a+ `9 {7 K, G
, @( U$ }9 W7 m( b! e7 p9 c1 ^2 w- U
列出文件和目录
/ \( |0 K+ F0 E8 T% v使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:- ~( G$ T( P3 J) O: q+ d

7 i  z: y" T* b  p+ h; ~files = sftp.listdir('directory_path')
6 n; R2 x- G% b& i' ?
( A% C' \& \' p5 i9 a* r; m删除文件
/ G- Y5 g7 g; n, O1 h使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:/ ^# w( \, Q" m3 p( t

' U! i1 V" ?1 L3 P4 wsftp.remove('file_path')
8 v" d6 c: _& M+ o& m% @1 M9 Y6 j6 Q5 L5 U" C
关闭SFTP会话和SSH连接% e4 ^7 Y' a# R6 [" {  Q- s
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:" ?2 Z/ S; L6 T
( h  F* o, l$ z6 W0 I# c. r( z! V
sftp.close()( c& }: T) h+ A3 C& h. Z" {
ssh.close()$ [& q% t. L0 W) }
; ^* _, O0 @+ g7 J
完整示例5 c1 J9 `- P3 q$ y+ v0 N
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
7 T. O7 t* k6 j, q8 |% D/ O' I; _6 Y' ^) {; Z4 z
import paramiko8 P) |1 u( }$ t% x9 [' r
  c0 C4 g9 j2 [- I1 Y) ?5 [" I
ssh = paramiko.SSHClient()2 h6 V: @/ \% X& U4 G
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()): ~. r& q9 u) t" m( x
1 D+ `8 m0 f- Y, ~
ssh.connect('hostname', port=22, username='username', password='password')
6 M  x: m) W- w0 k
/ x. g4 ^) @3 e: o% wsftp = ssh.open_sftp()1 M2 d7 S. r2 W3 S1 R
7 m& y, `! s$ V4 p. j" f" E: F2 F
sftp.put('local_file_path', 'remote_file_path')3 w* R1 D0 e" P& B
sftp.get('remote_file_path', 'local_file_path')
' |4 s8 w6 ^7 u) y5 }* J
8 t9 p. Y' }3 S( M+ i3 @- V) gfiles = sftp.listdir('directory_path')
/ ?2 f) d5 s9 ]4 n7 a- l( n' i
6 g+ B3 @6 }6 i6 ?9 ]sftp.remove('file_path')( _2 N& f6 c! x& n; d" b
* e8 [$ e3 @: u$ C9 h- X6 H4 q
sftp.close()
8 p8 i# L5 `' b' z1 Q2 T5 `; {ssh.close()
4 k0 T8 F2 G( l# _3 Y4 U8 ~% Y
. R/ ?" }! P5 q3 n: g% a' g' }1 r* L3 Q

+ a5 j9 C& R! R" C4 z




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