QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。! B3 D$ S! n$ K9 {+ ~6 |

  o2 A* C( |8 N: Z7 S. [安装paramiko库
3 h  O2 s0 ^9 {" c8 m' q) w; T首先,我们需要安装paramiko库。在命令行中执行以下命令:  K. g) p: {9 E3 A+ z
6 i# Z( u8 T% s9 Q! p6 j
pip install paramiko
' b$ t3 v& w. l* t3 r6 v2 g# T连接到SFTP服务器6 s8 x% W: K  o; o4 }7 j
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:, G: C5 L$ y& F* B& W

+ @$ o6 u. S2 `import paramiko
' e, h! G3 i6 h
" y# T8 P/ K) w) E  N) q% ]ssh = paramiko.SSHClient()
4 x8 n1 w4 L$ d5 o0 H$ h& J( I$ T+ s# d# c7 p0 v7 c$ s8 `8 j
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:- d5 G: w' b9 k4 s  q
' s( e3 v, p6 r
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
. C3 z& A  Q2 l$ I9 E' _4 G6 O  @0 Z
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:; p6 H$ r  v- F- A

# I' B+ B$ H6 ]0 [3 B- ]6 {ssh.connect('hostname', port=22, username='username', password='password')$ G8 W1 e6 m, p! q7 u

. k, z+ z& G1 Y6 p- x0 r* A9 |' A创建SFTP会话
, M4 ~& F8 e! V成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
4 `. d: I# r( D7 ?, A: R6 Q; O4 u/ S2 `: m9 Q% b$ Z8 r. g9 E2 |
sftp = ssh.open_sftp()
  V: a  A2 K; Y9 G* V! U0 {$ p% p4 c. W" y) `' Z
上传文件8 G1 l5 Q: O2 _2 d
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
* m  A9 x+ r9 U3 I, h2 H: ?4 N* g$ a/ X+ Q$ x
sftp.put('local_file_path', 'remote_file_path')
7 b2 c" e) G5 L! p9 G% }; X$ k, `. v8 `) o. A. x
下载文件
, j$ R, d" j3 ?! O7 b$ g除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:4 U9 p) j0 Q( }% v9 W0 W: ?! D
& v. ^' R4 t7 f* E6 H! X* E: i
sftp.get('remote_file_path', 'local_file_path')/ n/ z6 ~% }/ U$ o/ }" N" H

) `. x+ Q$ _& ~列出文件和目录
( k; E  @( E. I1 j# z( }4 w: X/ u使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
1 Y$ S' f1 q3 q: Z' V/ M7 l  @/ \8 _3 i
files = sftp.listdir('directory_path')
  m( L, @( P6 Z) ~5 y$ b0 Y
- |3 g3 h- R! v. c* t6 G, K4 P: U删除文件/ z! ~+ t. V8 {) O. S3 L' `) Q3 _
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:7 }, @1 N8 M  k2 A! L( R) j7 ?$ @

2 b% R& d: ?1 P8 N4 a7 @8 asftp.remove('file_path')( O& P6 ?* w/ |
8 d# d- i  B. j3 }! ?
关闭SFTP会话和SSH连接& i1 }/ Q& E' L, T, F* a. {
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:% N9 }5 r. U1 N6 k2 V8 ]1 M
" a$ [7 H1 V; o1 {% I2 U# v" w
sftp.close()
5 e$ x) _4 |$ w+ {ssh.close()1 b- o. b9 C( u) z) @2 U. m& ~
; }  ^4 `6 s" K% T, a& B
完整示例4 H0 }8 {4 L- F# Z+ V# K9 Q8 d
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
) Q$ l! {3 r3 N0 S/ H$ D9 k7 r
* _( j# a# I  ^% k* @$ Fimport paramiko
& i5 k, n( l! n) B5 h" S2 u$ x* P2 f& J: ~- G
ssh = paramiko.SSHClient()
" W1 \. m( U8 J& ?: a, M% i- F9 Y7 |) W1 }/ Jssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
" @) s( u1 R! f2 g8 q- D* W2 q& p. h  q  |
ssh.connect('hostname', port=22, username='username', password='password')- S( A, w% k4 v7 a: w

$ v! e  P+ j1 s$ x* [- \8 lsftp = ssh.open_sftp()7 Q- L% c$ V! M" i6 A# }1 f/ v

- c9 ~+ `; ~6 S* L2 nsftp.put('local_file_path', 'remote_file_path')4 `( q0 B7 E# M4 F) I  z2 V9 `) o
sftp.get('remote_file_path', 'local_file_path')
6 y. l  K4 U- q: L; G
% G: n2 w" B6 D9 H: S4 I) v* Dfiles = sftp.listdir('directory_path')- j) z4 h# }: C; m: O! [
) Y' O+ o3 g  e' K2 x; Z) S& ^
sftp.remove('file_path')
, F4 h2 o- @0 G% U6 [. P* F' u* o7 a* E
sftp.close()9 a3 Z1 O: G1 ]; L* V  f/ |& P
ssh.close()8 O0 k8 ]* W& C8 ]$ r7 X6 o: B+ _0 c$ [
# i8 J& F1 R' Y( i% o
3 e' n  H1 P4 W5 ]# E! f* h
4 j3 [; |% q  |! E9 n
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-16 00:14 , Processed in 0.790402 second(s), 50 queries .

回顶部