QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2836|回复: 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操作。% r/ G& x* v% K( _8 A& O
8 _' d( x- }$ K- S1 l
安装paramiko库
% k; Q! Q, G/ ]0 m首先,我们需要安装paramiko库。在命令行中执行以下命令:
. h5 I2 X. o  ?3 W3 d
8 d  G3 ~; A0 j' E* E. P5 `pip install paramiko
9 ^4 u6 C1 ^9 S8 L" s+ G& F$ [/ S连接到SFTP服务器
) F: V7 Z" K2 A# w, g1 i0 Z; o% d  ]接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:9 D9 C6 U1 C6 V. ~) x( I; R
! B- `9 c( a0 f: r
import paramiko
* A3 C" m  v8 ]) h2 q
4 ]8 N1 E; }1 g# b' u# j; qssh = paramiko.SSHClient()0 V' n2 _$ ~; r$ M
/ k% k2 l, P0 C/ W5 G( O3 L
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:7 t8 K1 z# E2 S" {

+ Q" T% N, j; Z( j# d% w* tssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()); ]- D( {- {6 H
3 u, y1 D2 M# q4 `8 O" T
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
# L& z. ?# F) |8 \4 F) s! E- T8 k2 q. W! w
ssh.connect('hostname', port=22, username='username', password='password'), a9 \  b9 P, g# I+ S/ K5 ~
7 N* v4 ]* C/ {: L" O1 S7 F
创建SFTP会话: Q3 M8 Y8 @" ~
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:+ {7 X7 f6 p! _5 T& a! q) C

) N# S3 a: P% E$ c9 K! Ssftp = ssh.open_sftp()) ]; P) A8 b. }
& ~0 H' P* k5 J6 ?0 k! W
上传文件
9 ^8 p% Y7 W& p6 N/ {6 y' F/ ^现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
  A8 l- B; l, E; p7 R2 S/ ^" i0 u2 [( Y. A8 O3 V
sftp.put('local_file_path', 'remote_file_path')
2 H1 K. }  b) j! I! k  z5 M7 e2 ]8 V: x+ L% v" \+ h
下载文件
, E: q( o# u( \/ M4 o6 W" A- f& e除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
4 ^8 ^6 Q4 i) A4 O. }! x0 v9 A  ]& v3 U" ~7 C6 m
sftp.get('remote_file_path', 'local_file_path')
+ F5 A; D+ u# f: s5 b# S5 v  u! A# \2 e
列出文件和目录$ b# q- S$ o+ L( m, K' o
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
8 Y" `8 _8 {' t- c5 A( z1 l' h$ d. S5 D8 r8 y4 n  }" _9 P2 Q. S
files = sftp.listdir('directory_path')3 B" K$ `6 d" T. e
+ J6 i7 {1 \7 d  A$ j, F
删除文件
; I: V2 n- d$ ^3 L5 A使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:# S% ^" t0 _: {9 i9 Z( G

7 c* s' ~5 a4 b  j+ ?' a9 F% Psftp.remove('file_path')
- [3 {! Q3 p7 C6 r2 x% N2 `7 J4 ^9 G* W* i6 Y. [
关闭SFTP会话和SSH连接
6 U* n' ?% l$ x完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
) K, M; y" |' ^1 O
5 l1 q% O6 m9 ]7 {- m4 l8 P; Xsftp.close()
" R( w& f$ f/ m' h+ z1 W3 G6 n. Nssh.close()
0 R; |" c% Q0 r- Y6 e/ v4 \- L6 Q' I% d& i, Q
完整示例
& u# f5 D6 ~) s+ p% z下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:& m% n) r, A5 E; F4 T% p
  c. Q) Q' I  b8 w; x
import paramiko
6 @% X5 O# V" N* M* \8 N6 ^5 D0 h, q3 w0 k9 ]" o5 M% n+ h7 D
ssh = paramiko.SSHClient(); m" b6 H9 r3 j) W) r' K
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( |5 N4 s% J9 y% i/ l( `+ f' q
' z" j* E1 ^8 W0 Sssh.connect('hostname', port=22, username='username', password='password')
! V- Y: S1 Z: _5 w' f: E6 ~* k- W3 Y) ~0 Q: X+ y0 M
sftp = ssh.open_sftp()4 t' o7 d7 X; C* E1 n
/ s- U7 C2 `- J5 P, ~
sftp.put('local_file_path', 'remote_file_path')- p" d6 c4 @  ]$ n& H' n
sftp.get('remote_file_path', 'local_file_path')
$ ^+ p7 V4 g! H5 Q, s, n$ t; t% l, |9 d! Z
files = sftp.listdir('directory_path')
$ z9 D$ [9 ^) p4 V' d+ ^' ~3 `) y8 b5 h: A2 G5 {0 m4 w1 e. l  C
sftp.remove('file_path')6 U, @, S( \! c$ ~# R
" U1 O9 z% C+ S, u$ f: Z
sftp.close()! V# f7 p4 _0 f3 S
ssh.close()
. k% V& t" T) k9 v, Q9 @/ q2 N0 a4 O  L- z3 x* `& }) Z
! c! P) t7 A! L2 a9 o
+ ~1 B" U% d" K! p5 F# C% a4 ]7 O6 j
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:47 , Processed in 2.181563 second(s), 50 queries .

回顶部