QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2685|回复: 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操作。8 |8 R$ N/ e, y; P) w. ?" A( I
- ]& G0 Z9 p" N1 Y4 v
安装paramiko库: v! S3 L2 z1 S; M1 Q. w9 F$ U
首先,我们需要安装paramiko库。在命令行中执行以下命令:+ [* L* f% D8 P
. _7 Z1 V6 a! x* d7 ?6 h0 J2 V
pip install paramiko
( i. D/ B0 H" ?, n1 B6 p3 n连接到SFTP服务器
" y0 [( L1 s! k, H. w接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:) u, l* d2 {* g  C; m: U; x' D
5 \9 D3 F7 K: G1 B  |+ B0 o: s6 v
import paramiko
5 Z! H1 \; U7 q- L- h! y1 \' a7 a- {5 y2 t
ssh = paramiko.SSHClient()
3 Z1 V* O9 }" n4 b  V4 r
! O- J6 p* A2 x  z4 V- h然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:0 _( f1 e! I- d$ v

7 V* }% w. U$ g4 Hssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( q$ J# _4 i9 a" U6 t& b
# ~1 e8 _) L7 E& }0 x1 T; U4 \3 R. W接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:) \! r+ I( q5 M: M9 L

. f( E( m: p2 sssh.connect('hostname', port=22, username='username', password='password')
! M/ [! o% K; q* n
, L' |. ^2 f1 x6 P1 Q8 [创建SFTP会话4 w& h3 H% v: S# t$ c, X: H2 z
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:* i, S0 L& D8 n6 v

" H6 Z5 l2 ]% q+ T2 u; Esftp = ssh.open_sftp()
; m! q& U: R. c; D6 q  S  g' C* ?+ ]/ M+ I  B
上传文件% O, \9 Q2 d' S7 ]9 _& t* F: n& N
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
+ T  P  x2 h( h( o9 N/ r% F/ _- e2 Y
sftp.put('local_file_path', 'remote_file_path')
8 }. e4 D* {5 [  D
# M8 T  g: x$ \$ m& L( z  ^下载文件
6 H  L* h2 s3 K. F. `  \# ^除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
% t: S# ^8 k6 A6 z! G( x. O8 x
' e# e0 y# i: f0 C5 Ysftp.get('remote_file_path', 'local_file_path')
1 u. M& l+ L! L* m# f+ }, d
8 f6 w. f( B3 w) Z列出文件和目录
' j1 k* e4 w7 Y1 X& G8 ]# w5 Z使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:- R/ N" g1 {1 h8 j9 R4 D" C

* L0 A+ b: U: e$ g5 m: Dfiles = sftp.listdir('directory_path')
) K# Y! _7 r: M! _! r9 \: s3 y
8 ?) H" d8 @4 y# E% F7 z9 T删除文件
  W! c, Y/ [& ~8 @使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
# j  o* A+ L% i* z( v# h2 e
4 q' P* d. }' C- T" s( Asftp.remove('file_path')
: `1 C; r6 c0 F4 c1 u# |' ^$ r+ Y6 s# P% i1 W/ A
关闭SFTP会话和SSH连接+ d( A! |' R9 |' N0 O' p2 f
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:- x9 H9 L( c1 }. W

: t* e7 [) S0 I# P- t/ I% f! ]sftp.close()
. p/ G' {5 U4 l( r6 s$ }' gssh.close()
6 x8 F4 b" q! |4 n, @) `5 E: ]
' L% B  N; C8 N" O. I完整示例
/ h# c4 l* U6 l; e, x, @! V' V下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:! E! b/ P; }" p% Y5 ^3 F, O# T

% I  p% `' d/ L; _! ]" z; ?* pimport paramiko
# F/ _$ d8 h% N3 K$ }. k1 A
7 O7 _( n8 |6 W4 Y9 Q% s5 h2 y8 H) `- tssh = paramiko.SSHClient()0 c: ]" H9 M  @% L* R
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
1 i3 k6 j) G% f, M0 C. m/ ~" r4 D+ W5 M/ O$ ~4 I; z% b: [9 {
ssh.connect('hostname', port=22, username='username', password='password'), Q: e8 V6 [4 R$ j+ `' [* R

0 d0 }9 v8 u" w: i$ xsftp = ssh.open_sftp()# Y# Q- t9 O" H. h! Z- V4 ?6 x: O
) x9 K" t0 W9 {* n
sftp.put('local_file_path', 'remote_file_path')
8 W7 [0 r" g9 {6 e4 A# i7 W  tsftp.get('remote_file_path', 'local_file_path')5 ]: L3 z( ?/ \8 u* G

( d, o8 s: j& }) C) I; Ifiles = sftp.listdir('directory_path')
: ?1 Q$ X9 U$ y7 D0 \) G+ u
" R. l0 M9 g  }2 x) b9 Hsftp.remove('file_path')
6 b! x& k* d- S5 _  `- X; B2 ~- Z# S1 i( a
sftp.close()
8 L% P2 S5 L$ g4 ^  `& W9 Pssh.close()& T) V" `: `+ i/ z* j1 l5 @, a

( x! Y: P0 N+ h% h' c) B. M8 r, K- Y

, ^# w' S( W, y+ x$ M
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-16 09:47 , Processed in 0.413805 second(s), 51 queries .

回顶部