QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2676|回复: 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操作。
7 }2 b) Z( \, R! r
, `, ?( C0 d0 q0 L% H) W0 J安装paramiko库) m: L3 k+ ~% b4 m& D3 e
首先,我们需要安装paramiko库。在命令行中执行以下命令:
4 V1 x) H2 }0 s0 [
. q2 R# I8 S/ H) X+ j/ npip install paramiko# b% c# u7 @' V% W! q2 V
连接到SFTP服务器
7 r  Z) i! Q$ D) z( Z- {接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:: u7 i2 q' b2 E# i, s
) n. r: a+ P% A4 ^7 h
import paramiko  Q5 R! @+ E( a, ]" S' `% O+ p% x' f
. T, i* s; V, ~: c& H, Q8 c. o
ssh = paramiko.SSHClient()
2 w+ i6 v$ y& Y" g- |
4 |; Z7 h8 I* k2 B5 d然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:) ]: f$ n  b4 \$ \- Q
6 g0 E- a$ m, v5 }
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()): V! r, C5 X. C7 [# w* r2 E
0 `) c8 W! x( `) S: o( O
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
$ Y  _8 x, `! O4 M( n
/ ]3 l3 N4 s0 Y1 P0 Y. Dssh.connect('hostname', port=22, username='username', password='password')
+ y& H4 _' d" c- h( w/ V. v( g: m; [
创建SFTP会话) ^1 t0 A% {  c& K1 I0 p5 b
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:( ?# h, X3 ]; ]0 y# T

, V( u* c; h) y8 b: T) Fsftp = ssh.open_sftp()8 x* y, F  ^* @, h, T: }! J& H
+ a2 b9 @2 M5 @! ~9 ]1 v- b/ G
上传文件; ]- H% Y( x/ n# {% t/ l
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:0 _8 R' |  O( _9 h/ g4 s; n3 x
6 o- l1 ~$ V; Y+ @& u, c% O$ p
sftp.put('local_file_path', 'remote_file_path')
2 H" k2 W. c, D3 I# Q) K: r. S' p- n) l3 {3 o5 p" P
下载文件
, i' ~, f( i1 ?5 W: H, i7 b. e' C除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
! T) m4 {. b+ r. V) r$ }7 A6 @. g+ }. M1 U( ?: ?: ]0 s) a
sftp.get('remote_file_path', 'local_file_path')
/ V3 C) o: `& X0 J8 l) g) g
( y& M0 V6 o6 i( t/ L( w/ B列出文件和目录$ j4 s& |! }- `- i- |" L
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
5 d" u, Z( i: m: s( m/ e( L) i6 B% m) ~2 L2 n& G- R4 E6 o
files = sftp.listdir('directory_path')# t# U* S. r( I! R* Z

6 L) |) u1 |! o' t4 D& r) p删除文件
: W2 u% |  ^; ]" O. T  c使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:# M+ D, ^- J3 F7 j7 f6 q4 O

3 p5 b2 I' V+ {1 rsftp.remove('file_path')
5 H; }. S4 ~' `" \, i
- G( ^% [4 C5 a关闭SFTP会话和SSH连接/ }8 M7 H$ s' E5 {+ d
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
; k- Z* N" k4 @# |: V/ S) u. H
sftp.close()
& U" c+ Y1 v9 m. S, E% wssh.close()% d5 O5 }1 d2 o8 J, f5 B( K

& }7 u# @* Y' x8 J. N+ ~  y) O. {$ m完整示例! k: J' d9 L- m6 A* Q
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:- ?/ w6 U3 H) z- G: `
. z3 C; L: u; v5 ~
import paramiko% o$ z0 p' y/ R5 Y
' @& u: g3 |' N7 T2 b
ssh = paramiko.SSHClient()( F1 X5 Q# h5 }/ m: p
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()). d1 N4 Z* z7 G# v/ U6 j
: Y5 ~& o, b' c( L* _
ssh.connect('hostname', port=22, username='username', password='password')3 ~- _% L5 M1 ]- S
- t. I, q% F+ y+ |, e
sftp = ssh.open_sftp()$ h0 W& z# x! z* n) X; @1 S  l" f

% t: A2 |/ J: w6 l2 [" Qsftp.put('local_file_path', 'remote_file_path')6 {5 E7 U# @! S1 k, w* o5 C2 _
sftp.get('remote_file_path', 'local_file_path')" t/ N# E& X1 f; ?& k# {8 q: m* a
% |3 K; H; G( K* u  e+ i. b
files = sftp.listdir('directory_path')
) E1 Q) g# p! t, p- q9 _
" |8 Y! _, r6 r) u, Z3 Q2 T: Lsftp.remove('file_path')
: c2 A7 h+ S. b; K4 b; l1 L- H: d; j. I3 w+ E
sftp.close()' {& Z7 A- _0 K0 t! e! x& l" y
ssh.close()
' I, k+ `) v/ S2 P' v( _
4 f! v4 h$ j( _+ y1 k) V% P  r% D
0 `) q* Z  }' j" _5 n, w  K3 d& W
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-10 18:41 , Processed in 0.501350 second(s), 51 queries .

回顶部