QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2771|回复: 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操作。0 Y5 F! H+ p0 O- B
* P  }- e6 r$ N8 B
安装paramiko库; u+ {% `+ m( K7 i: h  o
首先,我们需要安装paramiko库。在命令行中执行以下命令:( D, z, k; L: E8 U/ p

9 [9 Z- J  ~, i, N. Y9 Wpip install paramiko# |9 N/ A9 ~4 M" {
连接到SFTP服务器
1 a! R/ P$ Z) G/ y! G  ]接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:6 N. r' v: P# t$ |3 T& Y/ I

$ X& J) ]; r8 p/ ~: w5 ^import paramiko- U/ I' R3 @1 ]! v% c0 j

/ k% u# A" e: t# Dssh = paramiko.SSHClient()( w1 O% N- y! [# `  h5 }

& y' Z4 t+ C( @然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:9 H0 f, {8 l3 J  {/ j0 o
- q, e  L. m$ L! S7 c0 @% ?& m
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())% ^6 T4 `% U1 m" @( ~6 O

1 T3 G7 I! }, ^& x% G7 L* R接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:0 y0 ]8 W) A7 t8 ^  `% u
0 |$ X/ t( U1 v$ O
ssh.connect('hostname', port=22, username='username', password='password')! }+ d9 w) w* \* @+ Z; p

( i8 n2 R+ K$ V* }4 Z6 K创建SFTP会话' M' i% W/ f( r' q# A. N; j
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
: f7 V: x4 D8 A2 Z. q4 P5 M& ]& i! b1 i+ l( n) r/ \1 _
sftp = ssh.open_sftp()
: X1 h9 \4 W* g& H; W
' L  K/ B  F8 b1 L% Q- z1 P) S上传文件
2 J1 ?% B8 T1 P现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
/ o7 ]- s- |, Q; a$ m- i, C- [' }- E  ~1 z0 z
sftp.put('local_file_path', 'remote_file_path')% z% p2 i+ Z. i7 B0 n( f( t

& Y( C/ `  K: P5 ?下载文件. v/ f. x' K6 c. D1 [% r
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:" d/ Z1 H; m5 Q0 h

, z, b8 D0 V, \5 I/ [; jsftp.get('remote_file_path', 'local_file_path')3 s, s' x+ {9 v2 o! V' H- M
% Z! O+ f% n% T; C
列出文件和目录  b  p$ w" q1 e
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
9 h9 a8 h7 p- ~3 s
9 l1 ~( D8 }6 p4 U1 n2 h* C, Wfiles = sftp.listdir('directory_path'): v, K9 ^8 N( w! z
# Y* o1 m4 k7 a! f$ X6 {+ L
删除文件7 u' G% ?6 D2 K5 f
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:- a* `3 C1 q: v4 C

% p: [- \4 Z- O3 [+ H0 ysftp.remove('file_path')
9 Z) {0 k  b6 q
- y* g8 O% j  |. {- i. _& B: ~) d关闭SFTP会话和SSH连接
, w" t& ]4 ^" W; A3 X完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:) {" w" B% ^' q$ Y  V

7 Y3 b5 m% J0 m2 H& ~sftp.close()
" [" p! q7 M6 R7 \& H0 W8 issh.close(), S# A$ E1 R  C7 i

  J! P9 W, y! E7 k完整示例
; E0 L3 V; R1 c  u3 D6 g下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:3 \5 E7 e! Y( B) F% V, t9 Z

' W# P3 }' t: z9 D1 Simport paramiko
$ ]' t4 B- a) @  {. m! n( n  \
6 p! x0 L1 j% V" v5 f, A' U# E" Y$ }/ Q  Pssh = paramiko.SSHClient()! J' A' x, Z! D$ J3 Z- g* I
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
8 Z7 R, a- T# {/ i) m. ^3 |5 {7 }  y( H
ssh.connect('hostname', port=22, username='username', password='password')# T3 B3 F) d! ]4 J: i+ v

! S- x0 ]9 V5 X7 c2 A0 t" ?sftp = ssh.open_sftp()4 o1 G3 r: O# Z

+ r* w7 s* O  r* b6 O( ^sftp.put('local_file_path', 'remote_file_path')
9 }! F5 {7 r6 i1 G- B. Rsftp.get('remote_file_path', 'local_file_path')
( S, i& f' n% ?! w6 q, B3 U, @1 U4 y: f% s, [
files = sftp.listdir('directory_path')
0 a5 ^7 x2 M. @$ _$ Y2 k0 G5 d* a% Q; K, i5 j5 Q$ l. J
sftp.remove('file_path')$ L2 O( J/ B9 v+ b* n2 ~

: ~; g/ K6 w4 A# Q( a3 {sftp.close()
8 M# P* F7 i! k' G7 ~ssh.close()
, q' u2 s4 T% y; i7 F6 ?6 p6 s" h0 ~* D; f0 J
; l; Y; H8 O  f, v3 D* x: g

3 m, Z0 P! J; X6 B8 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, 2026-8-25 20:01 , Processed in 0.295660 second(s), 51 queries .

回顶部