QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2720|回复: 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操作。8 t, @3 W7 J& ~  R  h% x! `

" A, f- p* _1 r! q1 A9 t安装paramiko库# g( A7 m1 U/ }$ N9 P
首先,我们需要安装paramiko库。在命令行中执行以下命令:
4 S3 T" e9 o' ]9 u' I( _* O/ j: q: ^& s- `
pip install paramiko
( c  Q" |+ I  P$ ?! A连接到SFTP服务器
7 u3 L- P5 W* a6 t5 x: w接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:4 q6 w$ C1 H$ r
8 ~2 ]) M! m- |& w; L0 z
import paramiko
' N" d# s1 y. N0 H: d8 x- R
2 g# X% g4 V+ D5 d/ tssh = paramiko.SSHClient(): Z" Z; h% u+ r7 |/ T' q: c; q+ z

! h( B6 `3 g' [- I$ f然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:, ~7 D; _8 B" W$ h7 Y
0 e9 G  K5 g9 f* [7 n# P" Z- {
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# `+ b2 s) K) O9 D1 w
4 J- O" b" l3 w
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
+ _3 E, M9 s6 `0 |* s4 M) u6 U( d, q. o: r7 h
ssh.connect('hostname', port=22, username='username', password='password')
2 \: U$ U3 T3 |; `' D7 L/ Z, n9 ^% r" L! w
创建SFTP会话
+ u( H4 U- j, x4 |( W成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
4 S+ {- o: b  m# R
1 x$ r! U# ]0 K0 u4 h5 |4 wsftp = ssh.open_sftp()$ G% p. u8 k9 q3 P; r+ |0 g

9 W0 {* M& g# D, _上传文件
# v. {3 u( l2 V1 s5 ~现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:7 j5 E! T+ W) f) c. t
; E. f1 d' ~& ~" T8 `
sftp.put('local_file_path', 'remote_file_path')
! Z' H' M( k0 Q( ~+ W3 c. |, d( l+ h! Y: L, A
下载文件" A; b( o2 s7 M% |3 ~# v  h
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:  \; D- F9 y: k! o9 e5 X

7 u4 n; ]; C. X) csftp.get('remote_file_path', 'local_file_path')! ^1 ~& }8 M* a/ Q$ Y2 W
5 R9 `% C: ^4 m5 g
列出文件和目录. V9 N. L3 n& H9 j& T% g' o2 N; N
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:4 `, I* R$ m$ U3 ?  Y

- Q6 n" M% d" u1 Sfiles = sftp.listdir('directory_path')
& W" }, w* @/ [" p3 v& P/ a8 n; L: U/ I% O+ z; h
删除文件
; P$ F4 F( ^6 o5 V- \  H; j使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:3 {7 {% D0 `  X- r# |1 A9 D" l2 ?

- U$ R7 ^: O( nsftp.remove('file_path')
* P6 f* a8 w) Q% W$ t% T, P/ w$ r& A5 ?, x3 c+ ~
关闭SFTP会话和SSH连接
( `. l4 U7 {( d0 |# P- k( S8 b9 }+ _完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
, r  }/ o, }) b% H. Y
" y( i, N( O. Z/ G! Psftp.close()
4 O0 ]# M+ w+ y" ]3 V6 R/ q  wssh.close()
9 B- w& p" ]# {. r* f7 P( z& }6 H" u4 \* v) ?
完整示例. R" D3 h3 M4 x1 F; o
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:' Z" a: U5 R: M/ O- Y1 P6 r
7 X  m9 c" {8 T3 [
import paramiko
/ t$ q' ?8 L. |6 C& i4 I2 e9 k  s
. v; R1 Z. m8 Y0 V; N6 yssh = paramiko.SSHClient()
! {! f- b" B9 ~) Y" Lssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
: {5 V  a  k3 E9 B. J
% E7 k* l/ E( ^$ b* w  h. Yssh.connect('hostname', port=22, username='username', password='password')3 u1 S3 N0 a) |7 O

: n$ N* l1 i! P' G& Z5 E6 i9 ]sftp = ssh.open_sftp()
- }8 z4 n8 [+ V' s9 l
% ^; \2 D$ J# I5 c% A# dsftp.put('local_file_path', 'remote_file_path')( b; {0 ^6 K, ^2 c8 ~# I
sftp.get('remote_file_path', 'local_file_path'); g! n6 Y) Z& A# G. X. @+ @( U
! S; x+ a; k5 ]3 _( a7 }
files = sftp.listdir('directory_path')
+ L" \) C( Q. M6 ^9 n& \: v0 x
& T- l. _" d7 e% C& x1 A5 i5 l1 c  ]( a3 Gsftp.remove('file_path')
( N5 z$ v$ v8 J  g& e) W# ?1 y
5 b; a) P) @/ d) V7 f# H" C: Asftp.close()4 {  @+ k" @" d  q3 w
ssh.close()) Z3 c+ g' H) q, X$ d6 [
' ~+ ?0 K: X' o# M. `  {$ r$ ~
" ^5 Z- W, J- @; t- A( j

' k: X; b* y4 V4 ~
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-6-15 14:04 , Processed in 0.434984 second(s), 51 queries .

回顶部