QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
  e& x/ _# {% f7 r. ]. H
! B, \5 x  n$ q安装paramiko库
3 x( F- w5 |: _# F# [2 P" {首先,我们需要安装paramiko库。在命令行中执行以下命令:
& K! D3 P) q/ n: R. g5 q$ f/ S. `) s" F$ T3 L8 {; q* X
pip install paramiko( h1 |8 t2 q" Q2 A; _( R" z- {
连接到SFTP服务器
! g0 K2 U% E- e! Y接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
7 [: e- |7 v1 R& ]9 H% A; G7 {+ I) u9 v7 n3 Y' d3 r& w- ?
import paramiko. W' |/ ?$ _1 O

  p' O9 `) c9 e1 B* Wssh = paramiko.SSHClient()
+ A! B0 z) w; R9 ]4 P) @" o* u
, V; B+ a- N8 ?4 Z0 A) {然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:4 k- _# d* x! i% j7 ]

  u, H/ [- S* c5 ?% l) \ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())" g: I0 V# d1 x! n% _0 J
$ `" |$ B* l4 p2 m7 J& ~
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:4 h! p: R1 }) X4 |# D

1 o: P" q5 T$ X2 a! |ssh.connect('hostname', port=22, username='username', password='password')8 o3 x5 G/ x+ K, V# Y

7 p9 w/ r( y+ ?8 `5 ], a1 K# D创建SFTP会话
, ]( Q) V, ?4 |成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:) B; k" Z# t; L3 [* ?! F
$ }5 ]; n5 _$ w; l" f
sftp = ssh.open_sftp(); _% E: ?2 ^4 \* ^. t
- }9 F& _0 I8 F6 e  V
上传文件  M1 T5 V* S) a8 V1 J
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
/ r8 _- W1 N3 t( Z7 `0 [
7 t. g* N2 [# \7 K5 M, X% c* vsftp.put('local_file_path', 'remote_file_path')/ w$ ^* O3 j/ G3 `9 g! v: d7 |; J

6 q& s1 ^. z( B. F下载文件. S; ~# ^/ _7 y: w
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:) Y: m* j/ y! N# V  e" n

/ n$ @4 w; m; z& M$ }% v- Fsftp.get('remote_file_path', 'local_file_path')
  s5 n6 h4 c" T* `5 a: r3 B
2 J3 P( t0 x; [列出文件和目录
# A- O% z  M& z# w使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
/ r  R5 i9 \) g
6 p) X& [/ I  V% mfiles = sftp.listdir('directory_path')
, l+ u$ K- H) }+ X- H4 C! W5 {4 C: h) J7 E# {
删除文件
$ u) q  ^1 K: D  K使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
$ E2 R" C+ Q3 x4 k
$ C) X4 l3 C  k  P4 lsftp.remove('file_path')5 f& u4 t9 s: p
1 ]) C5 ?/ j  ~
关闭SFTP会话和SSH连接5 ]7 U# |6 }8 J% `4 p! I: S# c
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:( Q. G& Z, _% i+ w

- v+ v3 x$ i5 o5 @4 T7 O3 Msftp.close()2 p( K4 ^& @/ M4 b8 Y+ g4 v
ssh.close()/ Z  k6 y" \8 s  U
  v/ c. _' F" }+ q$ r- \
完整示例
5 V# ]. j, ^6 y8 g9 P5 t4 E5 u8 k, A下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:8 G' f- q) B- j. i$ @1 G! i8 @
7 i  x8 u- G2 |9 l( u' l, o1 m
import paramiko6 w, f- a1 q* x
8 [: J$ t& r, C# t" Z" u
ssh = paramiko.SSHClient()9 c! Q" j! i: _+ b0 @( L1 e6 ~
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
$ X9 U1 r; c' {* z2 C/ f# {( T. b
2 ?) h* Y6 m1 Tssh.connect('hostname', port=22, username='username', password='password')
' _' Z9 g9 a& M/ U$ z1 P) y+ g' R. d
. P5 q3 O# U: T( K! ?& ysftp = ssh.open_sftp()
+ m9 z1 o4 L/ O% V9 A
# F4 Z3 n' H8 n% b2 usftp.put('local_file_path', 'remote_file_path')
1 V4 }. N( ]8 @, n8 C# psftp.get('remote_file_path', 'local_file_path')' Y% Q  d/ `: v3 n0 W' a

. n. L0 C4 [2 i& ^/ O/ H9 X% A0 ]files = sftp.listdir('directory_path')
: h+ ]7 p8 K! y* \$ U  s6 I8 S! l! T- p3 _, A
sftp.remove('file_path'). d9 _- Z( d- X! g( @# o- ]

5 n- ^  {8 m5 P( Gsftp.close()# W5 ?- s8 A' c1 p+ {  e1 Y
ssh.close()
) T2 o( P1 J% i- O
6 W" w2 }7 l5 u& z3 a2 D3 d6 M2 m# p. R$ ~. q1 R3 U

# q$ ]5 k0 i6 G0 L& ~7 k- q
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-5 04:07 , Processed in 0.476044 second(s), 50 queries .

回顶部