QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |正序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。, A% `: a! ~5 G7 f$ M# K
2 E5 k0 X$ c: d+ F+ [. ^0 _& }
安装paramiko库
" S8 S2 q/ r9 \9 d首先,我们需要安装paramiko库。在命令行中执行以下命令:
$ n5 |4 e4 p  S6 b) z6 f. z: o% j& _! Q4 u; g/ T+ t! T; ?. U+ `
pip install paramiko+ P, d( E" w/ ]. x6 T. Q+ h
连接到SFTP服务器
2 n- i  d  L% {2 S9 u. B; l7 V接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:2 b9 r* A  D9 Q) k

! T6 R1 b$ U) o6 jimport paramiko* g# W8 X" Q6 U+ n6 x# H
, a6 W1 A% n1 r1 ^
ssh = paramiko.SSHClient()
& h" N; @8 I/ F$ z
/ _9 [* ~. T' q( t( g, s然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:( n0 w6 b5 r5 i- K+ g2 i
7 |# r- {: ~+ \- @
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())* C- F2 ~# @" z
: e& [; a  q- P9 b- S4 j. R
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
/ |8 C. D7 j% v' `# W$ D9 G9 ~" I
ssh.connect('hostname', port=22, username='username', password='password')8 j, P$ a. {. R! @* M% ?$ l9 w

, A7 j; y8 @$ @. E& N  C/ E: P创建SFTP会话
! o. i. u" D; q成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:& j2 [* Z& m! R( t
4 r* j0 Y2 D1 G6 L0 K! p: N0 e
sftp = ssh.open_sftp()- O# J5 V' B9 P
7 X: \2 F) S: d2 j3 m
上传文件
2 E7 Z- e/ Q3 d8 A5 p现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:, E" C6 B: Y, i( }0 c4 O

- h0 Y) S( S+ c1 A8 D3 e0 b( zsftp.put('local_file_path', 'remote_file_path')! C, a4 y$ w- [; O
; G+ Z9 l1 r; ?6 T/ w
下载文件% a3 f( V% c: {
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:& w7 {3 J/ {3 n1 S6 x* B
* ]3 u/ g; N- [: k  |* R% N0 M/ _
sftp.get('remote_file_path', 'local_file_path')( l6 m" `! O9 U! x3 Q$ u/ I0 v

( `. x  I( s' Y8 U" S6 G3 I列出文件和目录
9 I8 O1 T) V' V使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
# d3 S( }  [# U4 x. d- s
$ ~# j" Q1 E9 a0 a: a8 N, Y  vfiles = sftp.listdir('directory_path')% U( ]% E6 ^: X9 z  x9 H3 A
/ @% |  J" f: z  U/ N' {. w* \
删除文件
* b. l8 t2 G; S4 J6 w5 e9 v  q. c使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:/ v# l+ w6 L) q* y
+ ]7 o# X& X! L1 j) B
sftp.remove('file_path')
7 q8 k! Q% Y' _6 k) I$ u9 N9 [) L/ X# T
关闭SFTP会话和SSH连接
% n9 n6 w" E9 y+ D) m完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
$ {0 U" j: B  X! l9 M8 D, x  F" L3 {( ?6 s0 S' ~; Z
sftp.close()
3 |  Q# Q' H. U& t2 wssh.close()  x- \- l3 ^. y  `+ p& Q& s4 z
& f- n' M0 ?: Y2 A6 r1 T5 O5 V- d' U
完整示例! u, m! o+ c8 s% ~- {( k% e
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
$ t; \% f4 d. h1 J% U( d* v) H
2 ^$ M6 Q6 f& l4 M" z. [import paramiko) r9 N2 E) d1 q2 r: @. ?4 W

3 Q2 g1 g) ?6 W# `) m1 E- y" Q& wssh = paramiko.SSHClient()
  _5 z+ X: f0 j7 t3 J3 essh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# M; X4 o5 S" D4 [
& z# |0 Q- _8 d- I$ zssh.connect('hostname', port=22, username='username', password='password')+ L" J- f$ ~5 h5 G- p

" j2 i' X) D0 f* Nsftp = ssh.open_sftp()
) E5 ~8 c2 C# _0 g. L3 s: z; L! p2 \9 ?0 Q
sftp.put('local_file_path', 'remote_file_path')% x5 h/ ~! e! w$ u% X# d
sftp.get('remote_file_path', 'local_file_path')
2 f2 R! O; C" z& \  L) I7 a# G
% W; R% Z: `  c1 z4 U; mfiles = sftp.listdir('directory_path')8 `! [6 b! ~' ~# [4 w  X

9 @6 v3 i; y! `sftp.remove('file_path')! L5 S  }7 n) q0 [' l/ A* D
/ w& M* _7 J0 A: O) U
sftp.close()
; o# z+ A* q- c7 K2 O0 {' _; pssh.close()) ^' u' D) X  Q% j" v6 x6 @0 M

) ^+ ]' U9 w' J% W6 \* Z( j6 f9 ?% b: F9 l7 m6 i/ ~) X

$ Z$ \& p5 b  W. P; O% y2 ?
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-4-13 00:18 , Processed in 0.826497 second(s), 51 queries .

回顶部