QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2690|回复: 0
打印 上一主题 下一主题

Python SFTP 详细使用

[复制链接]
字体大小: 正常 放大

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
$ P% C9 ~+ l2 A3 d& f2 u% ]1 Q8 R7 s' r  g. [
安装paramiko库  e8 B% }- a7 I% ^2 C! C& I$ H
首先,我们需要安装paramiko库。在命令行中执行以下命令:
, q1 ]( g. c* Y( \$ W' k! w4 j( ]/ r4 D
pip install paramiko
; j: |7 U! v1 L, J) {5 I6 `5 Z) S连接到SFTP服务器% V1 n2 w8 q& W7 ]
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:9 j: h4 A/ m" ?. E

; Z3 Y0 Y& [  b, m3 Rimport paramiko; d* V" k/ N9 m9 s

+ J  k  B6 ~+ \- W5 Lssh = paramiko.SSHClient()' t9 v( l8 j4 v
* k8 y3 X. k& k% U% H% Y
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:% J$ y; Z/ Q) V3 Y$ D

0 x3 }+ C3 T: k' E3 x( h# Lssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())! M* I: y- S( @8 f6 t
. Y, T  D- _/ m5 z  c  [
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:+ N$ a  @) e* q, i$ R) G

: n7 d+ R) Q+ [7 {; @ssh.connect('hostname', port=22, username='username', password='password')
' B- b7 I/ R3 w9 U/ Q1 N2 l9 y
1 b* q8 p! P( J% ^8 h  |6 ~创建SFTP会话& I+ J- y4 }1 \
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:; r" E# D' F) D
2 [, }3 ^, `# S. n. D! l- ^
sftp = ssh.open_sftp()
& j6 I% F0 b0 g; w- A+ F2 I- h7 a1 P# Y' t
上传文件' i* p  j3 ]! H+ }
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
9 J5 F5 ~  c7 M6 G2 b) b. E
! w, j' o( r" A: Gsftp.put('local_file_path', 'remote_file_path')3 W5 H9 O: b4 V' Q+ ]% A1 E1 [8 Z( o

# \- [) g% _% Z; N6 W1 o8 x* D下载文件+ G  J, I5 `7 I0 g1 \+ X$ z  }& M% E
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:4 }- @* s, P% f# C' l& L
- u2 m2 X5 u2 U. R  P5 X9 h" x
sftp.get('remote_file_path', 'local_file_path')
' E  x) t( n8 P5 I8 ~
2 [/ W- P3 r1 @( T8 v  Y1 {) V& Z列出文件和目录
9 l" I/ F: i; `/ K5 i使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:9 _6 q, y! Z' R& E
6 H6 o6 G: T% C1 O4 F/ z
files = sftp.listdir('directory_path')! E1 o: U" U7 x- q; F# w

. {- r: F8 c( t/ }4 a* V5 Q+ [删除文件8 [, g. ^1 V. I8 ^+ g" o% E' `
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:! }* k0 W7 T1 M- c1 T

) K% Q8 Z7 r: F3 P  i2 t5 psftp.remove('file_path')
# O- d9 l* v/ z$ ?
' l1 o$ p3 C( _+ E& r! I1 m关闭SFTP会话和SSH连接6 ~0 _. X+ P. d2 j
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
6 ]0 `( Y: c9 P. N: O9 G% P8 j0 q2 w( \+ k' V) W8 Y
sftp.close()) q; g& u5 ~% z/ m( W
ssh.close()
( t: u5 b6 F0 C6 B# e$ ]5 N5 W0 |8 F& L- ?0 L! R9 T( W
完整示例
0 Y0 X. p! ^9 D6 |/ [/ p2 B下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
# h5 ]. \, w* t* s: K% K. X8 d! S/ T( j( o$ |+ s$ P
import paramiko; o! l& z, o$ v- P' C# N- ~
! S" q# [$ @) r8 ]: w! J4 d
ssh = paramiko.SSHClient()* W1 F& i- R* q; r
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
8 C. y( D! C% O) Z
  r8 e8 Q/ A+ @- s. P5 Xssh.connect('hostname', port=22, username='username', password='password'), t0 v6 a) k6 a/ d" v! I
) Z7 g4 @( l; L) V  r
sftp = ssh.open_sftp()
& s% o) Q7 E/ i6 G' l, w" J) P0 ?! P- y6 s2 \: D
sftp.put('local_file_path', 'remote_file_path')
# R& v& F9 j6 _$ k; rsftp.get('remote_file_path', 'local_file_path')- Z! |/ m( o  o$ F
8 {( |; a1 q7 D+ @  Z+ p) r
files = sftp.listdir('directory_path')
& D& t! N3 ~0 ?- d' H) z; J6 P3 R  [* z
sftp.remove('file_path')9 D6 l" A% A# \+ s
# C% Q' B! m) S" R4 U1 @
sftp.close()) Y5 I7 w' H1 C6 p  t
ssh.close()
8 ]* J2 X9 U* }$ k4 z# z7 E
# N* r/ O* a* L& u( C7 M. T& e
- H& z& \9 y3 |' g5 R4 ?( S( h% ?$ y$ j; D" v
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-21 03:42 , Processed in 0.409873 second(s), 50 queries .

回顶部