QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
6 W% G- d+ N7 v, C9 f" q- m$ ~0 H- B9 \
安装paramiko库
% L6 A  g* T: @, f  B1 Q首先,我们需要安装paramiko库。在命令行中执行以下命令:1 O$ ~- I. F: @1 @4 X; S9 l

- ?# ^( L9 y# F& `& ?, Tpip install paramiko
- b( o; \# s, j: Y) E% [连接到SFTP服务器
0 w4 L4 ~8 y* {接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
' V* @. u3 i  s4 S' y# R% s* O2 B, `+ E/ E8 L+ C9 t
import paramiko
' j. H9 E0 C7 y) ]2 S
1 Z1 p: t  ?8 Kssh = paramiko.SSHClient()
# r5 @% ^# L6 Z- @; X
+ a: W2 R2 W4 C然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
% d" k5 i2 I) L2 f  V5 i! x! M5 S; G5 A
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())% m; i/ H9 @: o5 i6 E6 f* A( H
$ |4 F+ Q: J1 I9 S
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
8 p( q1 V! ?: @0 P
" V. Y% B6 W+ Bssh.connect('hostname', port=22, username='username', password='password')
2 K3 @$ W/ ~! H, `- t- Y! s/ v% A$ D
创建SFTP会话; ~& K. r' g; ~7 Z4 R' y
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
9 E6 Q2 c: k! T* x3 `  h0 w5 x. f+ J( `/ J# z% O3 M( ~
sftp = ssh.open_sftp()! H) N. _: h, G! J1 \  Y& @2 `
+ f  V" M% b' T, a( e5 D9 y0 S
上传文件
4 P" }, q0 K* h0 v4 u$ I  K# V现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:, h; I$ y0 C, m
0 K( J0 i! ?7 t6 }$ C
sftp.put('local_file_path', 'remote_file_path')
4 v* u2 K& A. V2 C4 L" x  i. r' I  R3 z7 J
下载文件
( F! E. w. |# r2 n, h除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:5 z, Y: \+ M8 j) n; t2 z9 `! A- M
8 Z- ?1 e1 d% T0 b. n
sftp.get('remote_file_path', 'local_file_path')
) ]8 l; j7 ^6 W2 [0 i, U4 H/ m. e1 M' _+ g1 T3 }4 F
列出文件和目录9 x; ?7 `' F8 ?
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
$ }/ a' D3 |+ h. A: C; @& Y! p- D
5 q# k! l4 I" @- x! f- ifiles = sftp.listdir('directory_path')% h; n, g: v- e) V# c. A: D- l
& F8 h' U$ l5 L/ Z# G7 H% M( n6 @
删除文件" h0 d1 S. r6 [- Y* x
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
$ }# a! \9 v# p: D/ d0 G  ^" z+ O) U$ X4 ]( w5 A9 t; M5 x0 N5 V
sftp.remove('file_path')9 G9 T% [1 C# \5 I

4 W( W9 O* {  R. J6 t关闭SFTP会话和SSH连接
! t; R# k2 T7 n1 A( K. d. ]完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:; n: }8 c) D6 c8 M

5 y! ]/ a* v" h9 vsftp.close()4 F" e( \- k$ ?1 F) Z
ssh.close()
$ D, d% @$ b8 J5 l
$ A2 I8 a6 L1 N+ Z: x6 J9 D" d完整示例% q1 I- p1 o: `- q1 i
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:; k: j* C7 H, ^4 x2 b" U$ O& q

1 Q4 h$ `. ^6 t6 d% Y) ^import paramiko
4 z* X5 W6 K+ \* I7 n: I. B" K1 U, G8 V0 `
ssh = paramiko.SSHClient()
+ S5 p. n/ D3 Gssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())$ a) Y1 B" x, \; c) s& N4 t% |; {

3 @0 e  {8 I# ^6 Hssh.connect('hostname', port=22, username='username', password='password')
( Y! @2 j; W: {6 F8 ?* s; c$ i: q6 v, w$ J9 x/ h  s7 _2 N! `
sftp = ssh.open_sftp()
4 \6 N& X( a* F% u$ {
. Q3 ]* _* L; Y) H8 a- asftp.put('local_file_path', 'remote_file_path')
2 l, n/ ]3 d' |4 Y9 o, M% R. o& Wsftp.get('remote_file_path', 'local_file_path')9 E) M/ y' c% b$ Q9 V

9 X5 \- S: E' A! jfiles = sftp.listdir('directory_path')
; v& r$ X9 D, k& Q6 u1 S
( `) p. C# W! R0 h% T+ ^sftp.remove('file_path')
" T0 G9 u; @8 E
, e/ d& Y. x0 {$ asftp.close()8 i9 v% a  }8 N# T9 c4 [% x% i" j
ssh.close()0 W( f$ V5 t2 A7 c6 _
$ R# \7 A/ K; U. Z" G- b, y
; o7 f: \" u! a( J, {8 Y0 J; j
9 s  H' P7 n& B! f6 [
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-10-16 04:41 , Processed in 0.426086 second(s), 51 queries .

回顶部