QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1171

主题

4

听众

2781

积分

该用户从未签到

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

; k% a- F& Q& {" a安装paramiko库! B1 s. }# q; w" U0 Y" X
首先,我们需要安装paramiko库。在命令行中执行以下命令:! s1 U$ d: Z' \- f
) d4 m5 q9 `! _; N7 Z, E
pip install paramiko, g! a+ u& h% \2 h, E; V/ d3 ^0 ?' b
连接到SFTP服务器/ F! I( {2 c) t/ [. K& w
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
4 h$ ^$ C1 [4 p, v# Y0 Z; h( H; a4 [! h# I4 m) |( i+ f) N/ \
import paramiko
( a& R$ g( v0 M, m3 z# W- b. K# z3 ^' a. k& {: L9 \+ I$ G# a
ssh = paramiko.SSHClient()
2 w1 R' k' M. L$ ]) g/ Y# e1 q2 e6 D
6 t% ?# u6 x5 G% [" M然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:) r' X4 \7 B/ G

! U6 u, Q2 u% `  P) k6 ussh.set_missing_host_key_policy(paramiko.AutoAddPolicy())$ f/ y0 M6 ~7 F( j8 S: x
1 r3 Y3 t9 ~, M! S& {. @8 o  v  ]$ B
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:# J) k) R, [- X1 J: }, B+ W: m7 ^
/ L  Z) c3 a9 r; \% o+ w
ssh.connect('hostname', port=22, username='username', password='password')
9 n2 `. x# Q% q. \* {+ M2 L# @# ^0 Z( @
创建SFTP会话2 g& o2 o0 S0 B0 o
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:1 {7 [, w; F  Q; I. Y! q

! K/ u: z- F4 Ssftp = ssh.open_sftp()* `! p) c3 [1 X4 b

6 @" p8 J( @2 ^0 d& }上传文件
, f0 `7 c& v- l现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:$ H% N$ \" d) Y' Y' r; S- k

) F" X$ q$ \$ l0 ?* k- ~sftp.put('local_file_path', 'remote_file_path')
% F! V! O1 k' u8 G  U+ n
" {) S# i7 t7 H5 _. e" c$ v. @下载文件# S. l9 P1 D. z/ ?' U
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:8 Z3 K/ Z: B! B# h1 _$ P
" E9 N" w, H5 v7 B8 `/ D: n. a) Y
sftp.get('remote_file_path', 'local_file_path')# E. g, V  R. T4 H2 v, d2 h$ l
( c: F: h  v' K- e, @: F
列出文件和目录% i( H9 p- j, @( Q  t
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:& s; _- b7 ^( ?

6 M% A' ~! J9 X+ [: @5 r8 z" \0 ?files = sftp.listdir('directory_path')2 W4 @6 m" `/ E) n; D
- U; I/ i" T  }6 S
删除文件+ G1 t6 x' y6 B  Y- _
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:7 d/ O2 {" k6 H9 V5 |& d
5 ?5 b8 M) O% V4 ~7 @% l) {1 n
sftp.remove('file_path')
5 L8 B( H$ [4 H. n8 ~& T
) U: F3 h; Y0 Z# F$ R关闭SFTP会话和SSH连接% z$ z, S( w9 J* M+ _
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:0 S9 Z6 w% \$ N* K

" A# B* O/ s1 K) ~sftp.close()4 q, c( o9 Q1 k0 h9 Y
ssh.close()
) W9 t2 S" }" L4 E
% ~. S) K: v4 b完整示例# V. P# x- ?$ S+ u( g! w
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
9 y, I' R0 K4 C; r; g, u: P) d* T# q4 v! Z& p* }( Q& Q
import paramiko/ R7 c/ [) b  P: _& Z& u3 D

' M% H2 T' \  f8 o  n$ [ssh = paramiko.SSHClient()
9 a2 h& E* V1 A  T0 D4 Kssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- L* b) J! G6 ], g6 z4 ~4 [8 L0 {* F5 k; |
ssh.connect('hostname', port=22, username='username', password='password')% A5 G; J/ g9 |- m# J1 h, E1 a
5 T. {' J" o6 f
sftp = ssh.open_sftp()
% ]+ E0 c% H% x) t3 a, d( R, ]4 B8 y. l2 E# D) B" n, K
sftp.put('local_file_path', 'remote_file_path')+ C4 }7 @& a+ Y* n+ ~1 [
sftp.get('remote_file_path', 'local_file_path')- Q; I2 w, G, \' y9 \$ M

6 y( r/ ]; A1 b1 Z* L4 nfiles = sftp.listdir('directory_path')% O$ Z2 t- j) U3 X* C" J

7 Z( Z/ W" C  d* k6 `  U: z, Hsftp.remove('file_path'); L, C  o8 Y+ `3 D
; _$ H* w  S) }+ |( Z  r6 s, \  [, L
sftp.close(). k0 b) G) o1 j: @6 h+ _
ssh.close()6 W! \4 m7 A: C

1 t8 {5 D# n  K4 G# n8 e
! e4 d: T; n2 X: Q; G( k$ Z3 |; s/ G7 y- _. O6 G
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, 2025-6-24 09:17 , Processed in 1.071700 second(s), 50 queries .

回顶部