QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。; I; w8 }" [7 J/ y0 Y& \8 v  x# c
  \8 V8 E* A% }7 H- r7 P
安装paramiko库7 u  w" w; v' i- n
首先,我们需要安装paramiko库。在命令行中执行以下命令:; ^+ o' N7 _8 I

2 ^% ?" r, v% m+ j- J6 ~! k1 Mpip install paramiko
( |" \" t5 T) M; E, ?  b( Q连接到SFTP服务器* P( ~8 B! Q  j) r
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:% o% V* x4 p4 W

8 k' ]/ t# I8 u8 M5 U, T4 r/ |6 wimport paramiko
. K1 M: y1 z+ `
7 `/ {6 P. B6 O+ `- [4 }* ~ssh = paramiko.SSHClient()- w+ ?; N; v3 i1 Z- y4 N- T
9 p+ q7 ^/ H8 ^. \! f
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
. i7 d9 V- d, f3 @5 F0 q) C  K7 z* D9 I! J1 P: i, r* e. P
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
. A! {0 e: p- |) H* ?; i+ l+ ^  i* s/ \
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
& G7 V. K5 Z' A0 d0 d
+ W8 `& J6 W/ N4 h( g9 |ssh.connect('hostname', port=22, username='username', password='password')/ C) ~( X* @& V

$ ~+ x8 g. B5 r2 z& p创建SFTP会话
, M1 X5 H/ z4 M9 Q) A4 I成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
9 P! G1 ~% v) v5 p  y' P6 z
( Z$ I! s1 N4 ?sftp = ssh.open_sftp()* J4 S9 t% }' ~; s( a2 n" ]
: R: Q, S6 o" {  z! d& {
上传文件9 t6 K, [$ \2 E& h' a2 j+ L
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:! E- M3 m4 l' G9 }  S
0 O# B- k0 {3 {9 O- J
sftp.put('local_file_path', 'remote_file_path')5 z0 |5 U; \2 \# V' q$ [4 g
8 x9 u( U' H/ [6 Q. R
下载文件
; l6 \9 W) o" y& y# P7 T& p除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
- N6 n& }9 j' \4 `2 @% B" h; E& I. {0 L" H5 a  p
sftp.get('remote_file_path', 'local_file_path')
) _) x" p# W; w! D$ z: n, M. h6 }8 H9 s$ {' W
列出文件和目录* h% L7 M: g' H$ U$ C' {
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
' d/ M  j5 z: d( @% `6 M1 J9 u2 {1 l
0 Q$ a' P4 Y7 ]3 u9 ffiles = sftp.listdir('directory_path')
- p) V6 I# ~% F; \, T; L7 x. ?% ]) v/ g6 ]- K2 v+ C
删除文件  c6 @9 _3 G9 ^
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
5 z4 g7 E( f# x! w
5 A% X- l3 E' ^- {5 qsftp.remove('file_path')5 s1 n3 \# r8 {' |

- x# N8 u* i6 L8 {9 z! M关闭SFTP会话和SSH连接
8 Y1 z. f# G  B6 |) o8 R! Y- ^4 ~完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:/ @2 a, ?4 x( v% H' K
6 B" Y7 `) X( Y8 m
sftp.close(), Q  v; n; r. Y+ E
ssh.close()0 p+ ~: p# @+ a" @5 e% K0 t& [

9 ]+ g) c8 T/ q- F5 M完整示例; W: {% \. k+ L) |2 t7 h
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:  Z) V/ x1 T! S( G' ]( d

9 _* Z# C2 F7 K, nimport paramiko7 S6 r" j. p! F8 {  W

# ~+ {3 f) C) E  Z8 Dssh = paramiko.SSHClient(): D2 C" D7 Q, f* r
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())& q* k2 K6 I. h( H
  l/ p3 y( y9 D5 @. {- {" z* i& h
ssh.connect('hostname', port=22, username='username', password='password')
% L: W# I3 A0 Y- i
0 L2 H: ^9 a- u7 y9 ?8 Lsftp = ssh.open_sftp()% e+ U0 H9 |6 b4 z6 Z' M
3 I( E" N, i1 q2 y0 g: @
sftp.put('local_file_path', 'remote_file_path')
! |( N/ S9 l( `+ csftp.get('remote_file_path', 'local_file_path')
. _, w/ E- S1 f, _6 ?7 J9 W2 m# J2 J: Q/ U
files = sftp.listdir('directory_path')3 F) g8 \9 h, O4 Q9 ~! o
, f# t; V+ t& Q8 s5 c& ?7 \
sftp.remove('file_path')# \' N4 _) v% z4 w: H; _5 ~; o
* A, h, ~# C$ I$ B" }
sftp.close()
3 O# C0 V3 ^1 C8 e7 d9 bssh.close()" o8 b& J% J' t1 E
' a7 U4 y( |0 _) Z5 S5 _
; P; K) {. a* s; ^/ x* a) D

& V$ u+ b. U/ r$ b2 z
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, 2025-6-25 06:07 , Processed in 0.387899 second(s), 50 queries .

回顶部