QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |正序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
* G/ V' C% [6 U" o3 |) m
! G  v% P' I# R; g/ B安装paramiko库( m8 x7 S% {7 p% R8 ^# M( t  H
首先,我们需要安装paramiko库。在命令行中执行以下命令:% N8 z" J, N: ~" `- }

6 {$ h; M( C& k. x. [8 {% [0 ^pip install paramiko/ J- b5 a& s2 g( r9 Z2 ]
连接到SFTP服务器8 W& r9 b3 ~1 m3 T; _* B# U: i
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:( }1 v' z$ e0 T$ G  j
: {7 }( o) V' F; L7 ?2 F0 _) L& g
import paramiko9 D, R8 m; m* t% K( k
6 ^# P& b0 p  b/ m/ P$ w
ssh = paramiko.SSHClient()" I# p& s7 ]. b. v+ y

  w! o0 Q; V7 }' q. P/ v; @然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:3 |! M" a  p. {. {; f: z* J
, [0 z) A1 G4 W; Y9 N8 r
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())( i1 O8 ]3 [8 s4 K1 h/ r- X

% B$ B3 `  G" ?: o7 {8 @1 A% Y7 N接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
6 F4 O* x! t% Y% Q' m4 Y% e3 |, m
$ G! y4 x: p% P! `. z- K# e$ O/ Gssh.connect('hostname', port=22, username='username', password='password')
. n, P+ ^4 m. V" E& u2 J+ ?# L2 q  m- L, \) }$ x
创建SFTP会话. p% V& Z) z5 c( U" r( G% `# f
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
  A$ C  u2 C, W$ B& g$ L! \- y, U& R1 ?
sftp = ssh.open_sftp()) v& K1 q- h) m& U# b) K

! R5 ]& ], a/ H% ?2 M上传文件7 _" A$ k5 [% D- P& [+ X
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
' w! u5 w' [* x3 D1 V4 t' e8 [( ?* i9 j, X; v, n# E' f
sftp.put('local_file_path', 'remote_file_path')
3 Q) M1 I$ p5 Y" b2 o! v2 c; p" I" a& s
下载文件# }- H3 G8 p& T6 z7 E/ J+ A& Z
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
' C7 P6 Z  z  Z) Q
9 p& Z# x* u, b# Y  a. R6 msftp.get('remote_file_path', 'local_file_path')6 g- O/ F9 r3 Z' [/ `& z
3 Y2 K  ~2 d3 n  Q% U
列出文件和目录% Z' C- _: w& \3 {& b
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
* I  e& {' z1 i2 l. k8 `5 D% i4 e, T9 c- |* p8 ^! S# \2 C4 Q
files = sftp.listdir('directory_path')% g* M4 S4 y2 f0 P& O5 X

  h- }; e3 l9 l6 _0 M, B  s- j删除文件
, ?+ h4 r( }& _使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
) [' E: f! C' W8 }) t  ]& A% W! H  i" K
sftp.remove('file_path')/ f( F6 _( O. ~& ]

- _9 a5 ~3 n3 c& W, Y3 _关闭SFTP会话和SSH连接2 H6 S0 l( @/ d1 }) T0 |, J
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
# F- ]3 c, E8 ~& r
7 V) G( s" N, j: O: f& a5 `sftp.close()( h- X" {5 \7 ]9 C& L9 G
ssh.close()
" D7 {, G( n  G4 a/ f8 w2 Y4 f0 }8 K& a3 F. j6 K. Y: n" w
完整示例. Z/ ^! V  h' g* b) a, s# R
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
$ N6 m% R# X' Z9 ]! y% L3 S( y8 Q9 m5 g9 R
import paramiko
9 T0 R' W; @4 c. Z( G4 ?$ _
9 m  u6 Y  I5 R& _: \  rssh = paramiko.SSHClient()
  f$ s: Q. l- m" k$ _, {ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
& C$ R! U8 `. G. ?" f2 J; X4 K( m4 k5 N5 |3 d/ r
ssh.connect('hostname', port=22, username='username', password='password')
/ w2 `& y- j$ O/ A1 c8 t/ K0 F
- H( n, M4 w8 V7 Msftp = ssh.open_sftp()
0 j/ n6 h9 z. C) M, \7 K0 b/ G! _  B. N6 {4 `
sftp.put('local_file_path', 'remote_file_path')
, T% k! I+ G- G9 q; ]! K5 g5 msftp.get('remote_file_path', 'local_file_path')
, v. ~5 f8 X  Z! f3 K+ i( K
  K! D4 w7 |5 j5 Tfiles = sftp.listdir('directory_path'): J: k$ ]7 w9 f7 T3 h; m( N  U: H
0 C7 ?* c, a# C( Q% P, e1 B$ N
sftp.remove('file_path')7 ^/ ]0 Z9 b: E' |$ e, w. q
- b9 q2 R5 u% i: ^1 \' ^  M+ r4 X# g
sftp.close()
% ~0 ^" A" [* y" Y% v( pssh.close()
$ b+ y+ e- ?% p6 D! l( ~" X* W
! H4 u/ {6 q4 A6 P# ~9 d5 Y) ^' P* T
9 |  ^& A! L1 Y1 O$ @$ \
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-9-27 17:29 , Processed in 0.326793 second(s), 51 queries .

回顶部