数学建模社区-数学中国
标题:
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 f
pip 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 v
ssh.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* r
sftp = 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: z
sftp.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! B
files = sftp.listdir('directory_path')
/ y h k/ g$ X
1 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 o
sftp.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! s
9 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 paramiko
6 p1 ?% [4 T& i# @* h6 h; F
8 u# ]) M$ Z8 U3 q7 ?' {6 O
ssh = paramiko.SSHClient()
: ?) E" G m3 X1 _: d( e O
ssh.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$ j
ssh.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) k
5 h U p# @- }9 F
sftp.close()
9 u4 J/ s0 m: N- P$ M
ssh.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