QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2722|回复: 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操作。
" F) f$ o, v' Y5 ?9 k* Z1 \! r. i' l% Y' j. }9 Q$ D
安装paramiko库
: R/ m( ?3 I& c6 w- }4 W5 _首先,我们需要安装paramiko库。在命令行中执行以下命令:
) }' X7 U1 }5 ~) W, y* C9 V4 M
/ Z+ F* O% w6 w7 v- Epip install paramiko2 e8 k3 H- A% ?/ I' L7 A
连接到SFTP服务器
+ c' C- u0 Q+ w+ v9 X接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:2 y% y6 S1 A& l! C! U# h. e  {

9 t; A: W. z, ?$ o* R2 oimport paramiko
- w5 k# s' b' Q: z- x
3 K8 l* O: a. i5 K% Yssh = paramiko.SSHClient()
% h# v  c  D/ A0 v! ~- Q! a1 V  m4 q! M/ g+ x
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
( m8 R6 r! i( z
  `- r2 z- [" z2 w% Jssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  c2 M( W5 B# j
6 s, @8 `6 J6 L0 u3 U0 t. r3 b
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
' M' Z5 M8 @0 Z( F* u: i& G& c) [$ S! S0 c+ H4 _9 p
ssh.connect('hostname', port=22, username='username', password='password')5 ?6 |5 v5 _  l, N" M

$ b# u. i/ C& g$ P. U( Y创建SFTP会话6 y" O- {, G2 @& `
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
0 D) D( \- {% n8 o# X. Y3 y) |/ _0 @2 X3 J' w
sftp = ssh.open_sftp()
) i, v0 h: s9 _5 }% p5 S# u6 ?- H
上传文件
+ i2 x1 d, ]! N6 n- i现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
6 {" I# M0 d. Q9 Q8 g- P. A6 f# ?6 F
& z, Y" X$ b0 n' _; v9 ?sftp.put('local_file_path', 'remote_file_path')
( k4 Z5 F. M/ H+ Q4 T/ z7 G5 B, g* [
下载文件
  K+ i$ l6 P7 c6 a% V) S2 x# G9 X1 G除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
1 c) u6 `0 L- P3 `# O- m, h3 G  n/ r4 s, o. O- Y
sftp.get('remote_file_path', 'local_file_path'); N. A+ M. B8 G2 g2 s6 F: {9 D
* b$ F# t0 |7 O4 Z  R
列出文件和目录2 u; E: D& Q* Q2 \7 }5 X
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:0 q3 g7 M5 V3 o2 B, j# q( @3 t8 p
; {6 e: M0 n8 ?! f
files = sftp.listdir('directory_path')* b! K% [$ x  n" [  U+ \! L1 t6 ^) b' g
; f5 v- i: i4 y" C3 s" W# C7 }
删除文件
! O- w' t3 x/ U# I% g* k使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:3 ^: }% q$ L) m: G
* H' O, K7 ^. {6 K
sftp.remove('file_path')
7 p8 L; b! l' E+ [7 s: T! m$ L
0 h- B. f) E7 V# X关闭SFTP会话和SSH连接2 I& U  w" M. X* o
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
# s2 t# Q6 a+ j) N8 c3 e' Q" O* s$ ?
5 ^$ L* [1 g; u3 o* S! Rsftp.close()# i( Q5 g( V" x5 I# T9 L
ssh.close()! p% K  q1 e7 ]( u. o, H

1 L" L/ R2 _5 E; {5 L# Q+ r完整示例
+ `6 k4 U. ~5 u1 V" L. @4 C下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
% ]/ g: r& O& k% ?" A7 h& X
& C% s+ g, Q; B( Q! O3 Rimport paramiko
5 p+ D: M4 D5 T. R4 \- p: V- f$ R
ssh = paramiko.SSHClient()
9 F  N- U4 M) u$ s4 a0 Zssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# c. p8 Z" V6 P: t% R! U6 A' _% d0 w2 g9 S7 m; I
ssh.connect('hostname', port=22, username='username', password='password')5 y4 i* D) O- |9 k
6 d! u) R. a& ?0 x, _- P. p
sftp = ssh.open_sftp()
7 ?8 m- j+ F  Y/ \. y7 R% @' j' E" h
sftp.put('local_file_path', 'remote_file_path')" J% m% s  T' ^6 |! _
sftp.get('remote_file_path', 'local_file_path')" n1 Q2 k! s) p

) V7 \2 `" W8 bfiles = sftp.listdir('directory_path')
$ d6 z+ T5 |, s4 Q+ k
# b3 O+ c# _" U5 wsftp.remove('file_path')0 \3 `+ Q+ p  C, p5 l; ^- u# Q

: C3 g, c% E* n9 x; U2 gsftp.close()- }1 o1 o+ O' a" [. P$ s
ssh.close()
% f( k9 k  [0 C) U6 i# G' i2 ~( S) m

# x  Q0 d1 H$ K. k& }0 _
: E  e+ Q! e+ S% @6 a/ ^& C1 o4 L
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-16 05:25 , Processed in 0.420200 second(s), 53 queries .

回顶部