QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
( X' B$ [1 C  _1 O# j+ j6 \- V/ H. T$ \2 E; F' X
安装paramiko库
* V( e" r5 A% _2 ~1 A$ c. r' j, j: ^首先,我们需要安装paramiko库。在命令行中执行以下命令:
9 e  z0 b& t* A9 c- \, T6 v( q; n
pip install paramiko/ T3 ^! Q( ]* f" F
连接到SFTP服务器
, F" N0 m1 C: n# |6 @0 I接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:/ g3 T8 x6 n! ?- Y( h4 C
5 d! P7 Y4 o$ O3 q) M& }! V( @
import paramiko
# l, I, g1 H3 b6 d) m6 E$ c
, u% K& x+ M" i5 S/ o/ }ssh = paramiko.SSHClient()" c) a7 T: R5 X8 I

8 \" a: d$ N% @2 K8 u然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
% x( t# @* L( T
3 r) z  L+ v% Z# {- zssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())* n% A! {, w; U1 S2 @: ?8 N

+ b3 h  \8 h# [; t1 ~- P# x3 k接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:4 m: p1 I$ k0 l. G/ ~+ g: y

! P3 k, [  P' {/ {: {! Fssh.connect('hostname', port=22, username='username', password='password')
3 S$ G. m; ?( U( I, ~% q* c' Q; l4 s+ M( Z
创建SFTP会话
, @3 a  x# n/ h8 u+ a: R成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:) X/ }0 N; K2 l0 C+ ]
1 i4 ^4 N" M" e- Y3 G: c* j/ [. p
sftp = ssh.open_sftp()
. P! x2 S+ B6 C- m# v. J" B' K$ U3 N; F6 k
上传文件
6 B9 }9 |7 x5 c0 Z5 q# }* G现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:- Z; L3 ^5 v% G* p, p3 S, w

4 T' Y  G9 l3 o/ m1 p. w7 a' {sftp.put('local_file_path', 'remote_file_path')
, D8 c0 u( m- Y  [2 j+ ^. q, b& Q' y4 Y
下载文件4 }$ I. C& x; A# W' H2 l$ ^- v
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
/ d5 J7 L% h" M0 h6 e( }# S/ q9 |" ?5 L  \5 u
sftp.get('remote_file_path', 'local_file_path')
! J( X% n7 v* u
! t( b9 U! ?7 b6 o3 d- T列出文件和目录# w. v* ~- K; ^9 A  J: C9 D
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:' _; ~/ E9 r* S  ?1 j9 O# z

! A8 N. R) b4 i2 m! ^files = sftp.listdir('directory_path')0 R+ A2 H8 H* O$ k
% T# ]7 w! p' F+ X3 w2 r9 g
删除文件
/ n' ?- Q& C4 y  l使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
  Z  U" j+ `9 s: N8 A7 L7 p% @' B7 |5 I( b1 ]
sftp.remove('file_path'), n9 h& K- t( Q7 Q* G: K; f
- c2 ~0 y+ P; t$ r; P2 y+ f
关闭SFTP会话和SSH连接
8 c5 m3 a( R+ }/ y9 T. S完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
7 @, @/ ~7 S7 k
. V& w" R) Z; X2 d) P$ fsftp.close()) W# F9 Z$ X/ r9 m) r. z  w
ssh.close()
, n* i* G+ C& D0 N4 M. C; C6 {9 j1 e4 ?( r9 G+ s" m7 s+ z
完整示例) b9 P' f/ X. z- D  X
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:! `  ~& n4 N- r9 {5 V5 T
% Q. k1 j0 X9 S# V7 V  O
import paramiko, l$ f7 N4 l  z  X
1 O7 R/ X* x' U4 z* Y9 @
ssh = paramiko.SSHClient(): b. m) ?6 Y+ u% V9 v7 e+ t5 A
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( N  i* R& _: d3 X- F; \( w, D' t* L3 f1 l9 J
ssh.connect('hostname', port=22, username='username', password='password'): \* Z7 r4 X! ?

9 S2 n0 Z! ^0 asftp = ssh.open_sftp()2 A! b; V0 Z' `# a, `3 d
# \- A' g5 l1 ]& T6 ^
sftp.put('local_file_path', 'remote_file_path')8 {+ o, l. I6 m
sftp.get('remote_file_path', 'local_file_path')
; s/ X" N# S, {. I2 K! ^# u2 y* V
/ H9 \8 ~) |7 O* L1 Hfiles = sftp.listdir('directory_path')
+ F4 V0 s2 D6 A
- o. P# x/ K) \6 l; p6 h& J% `5 ^/ fsftp.remove('file_path')
0 z9 B& G+ P$ U% U# c/ `/ K* {0 z- r2 x4 I9 [" m
sftp.close()* M$ a0 n. ^1 r8 m
ssh.close()3 }$ M% {; I3 ?) Z* s
+ B& X$ R0 ], \8 }% o
8 K  \9 S# j# Y: S! J1 K
9 s( |; X/ ?- @/ l3 _1 j0 P& v3 K1 L/ r
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-8-26 02:40 , Processed in 0.440862 second(s), 51 queries .

回顶部