数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-21 16:20
标题: Python SFTP 详细使用
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。3 `9 _( U# X8 ^" p' ?
$ S1 s1 S, m3 z* ]3 W
安装paramiko库4 Y1 K& ~8 P# `4 T% D# @
首先,我们需要安装paramiko库。在命令行中执行以下命令:# {$ E: U: t+ n9 v# ^3 s0 ~5 l: Z

8 n5 E( ^4 U5 fpip install paramiko- O. G8 j/ [7 Z& `* P4 d
连接到SFTP服务器
9 R" X$ k" e- K7 D7 d2 t, R2 x- I接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:) s9 i) i; C3 a
- E0 X- c$ y) `3 G
import paramiko
$ f% K' h" K* H$ `7 @( N: u/ |- D- v! w( v; Y) v
ssh = paramiko.SSHClient()$ [8 G& V$ Z; G3 ?, E: ^9 b2 _

5 F( F) v3 [# o8 o7 n) h* U) ?然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
. ]9 @' ?! a6 d/ d9 Y2 M6 E; D
. @9 K; b: [9 X1 vssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())7 W" j0 Q0 z) n/ p

( u% G' _+ I6 G% V+ y* Q$ `接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:1 U" h( x  P: e
8 r3 H8 _# N) s7 ~0 o( k
ssh.connect('hostname', port=22, username='username', password='password')) Q# `. d7 W2 U

5 }, D7 D( H. r/ {+ S9 n创建SFTP会话  e4 b, x6 ~, Q5 p# t
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
* ?+ X+ j* r+ \0 p& N
; ~7 c3 F+ g: W* rsftp = ssh.open_sftp()5 B+ q! p8 T* S& _& b* B

( G1 X& V, s( r' y上传文件
; l' e5 e) \. K& j8 y现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
, Z8 P0 p0 @4 k1 ]4 P
- w& n# _1 `1 L! W* m1 t: zsftp.put('local_file_path', 'remote_file_path')
, Y* p! K" H0 w. a, Y9 P" f+ \* Q9 r0 U; j& ~
下载文件( n& T, n. G9 z
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:2 H/ K8 t  S8 U5 a* N

& A# Y1 {% S7 j; d, C$ \4 a+ }sftp.get('remote_file_path', 'local_file_path')
8 x% z2 {" l3 u/ R" c) B1 J: d8 m
- H2 n5 n: N" D/ O2 @列出文件和目录5 t- j( _; R1 W: D* \8 \
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
# ]* w( J; C% Y( H4 a& v2 w( a
& ^! b$ F6 r/ O! Bfiles = sftp.listdir('directory_path')
/ y  h  k/ g$ X1 N5 x; h& c1 n2 |" B
删除文件
. I9 f3 N! q) q  N使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
( q' E# \1 a- [! T# w4 ^
" x4 j$ l7 B" Z) B: z8 osftp.remove('file_path')
$ M, L2 ^7 s: n+ k: Q2 J) J5 [- {1 J
关闭SFTP会话和SSH连接
" q2 I) M$ v2 [8 ~1 _完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
$ G0 y8 {. I3 Z7 O: X$ n- C, [& O0 b! A: G
sftp.close()3 @' a) ~; z4 u) k- h' D) e: O
ssh.close()
/ w6 V  L6 R$ h5 c! s9 u: {. j; c! e) v8 ]
完整示例5 @- u9 I7 p" J: @3 g6 C; ~
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
1 W* p6 {* o' P6 R7 y  n8 h9 U; J; o! F% S
import paramiko6 p1 ?% [4 T& i# @* h6 h; F
8 u# ]) M$ Z8 U3 q7 ?' {6 O
ssh = paramiko.SSHClient()
: ?) E" G  m3 X1 _: d( e  Ossh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  D" G5 E- m, X) j& r) R" L. N

9 ^6 Y' b5 s  ]1 M8 U$ jssh.connect('hostname', port=22, username='username', password='password')# z1 R8 ?# y( F8 C* ?9 g& U) K9 }

3 U7 ]6 z) ^7 c( p* e" ^sftp = ssh.open_sftp()1 s* o( j2 v! C5 q, O
- C6 a% y0 f- X5 S. G: [8 S
sftp.put('local_file_path', 'remote_file_path')! Q6 g1 _( n( x/ l
sftp.get('remote_file_path', 'local_file_path')( s3 x7 O% C# ^
! R# q/ L8 c: I4 x# [/ \, p
files = sftp.listdir('directory_path')- h5 n, X& K' T% N  b  T
5 C- |9 d* q. B2 {
sftp.remove('file_path')
$ }* ?9 Y9 {4 Y3 w  A) k5 h  U  p# @- }9 F
sftp.close()
9 u4 J/ s0 m: N- P$ Mssh.close()' a  q. R) b' D
& X% Y: R" m1 p- m) [3 l

& z6 x4 [  B. E' m2 z9 _- A; O: U5 T# |
$ n/ B0 P' _7 E' J




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