QQ登录

只需要一步,快速开始

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

Python SFTP 详细使用

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。
* M( b9 z! B0 \( o' I, z; R8 M, M
安装paramiko库7 K" y, l9 x1 {2 i$ U* |0 F
首先,我们需要安装paramiko库。在命令行中执行以下命令:( {* D& ]7 Y0 R! }
5 l6 P% D% y) p+ m3 R. I  z" w5 M
pip install paramiko
& s& y6 R; |4 _0 w6 w+ I( }连接到SFTP服务器
& o9 X% l& W2 ]7 X3 \& r接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:' K# `0 Y& t; z
7 v2 l( Z' ^& K" Y
import paramiko1 l' L' N( B$ U! u5 @; O
& d2 z) X8 A0 x- {+ b$ u0 J  D
ssh = paramiko.SSHClient()
# ?8 v. u& z* r5 ~$ W) v+ H5 q
: B2 R! H$ S9 e# _/ w& j! A然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:5 S- T* M+ s# j/ c- B

1 j8 Z$ s% ?0 T/ yssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()): w0 e  z- H6 W; u5 t
  [$ a& I# M4 [6 P
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:  E" B5 B6 A3 p- x0 y2 V

0 Z% ]8 T6 F" I. G& s: ?ssh.connect('hostname', port=22, username='username', password='password')
; Z% a6 n! {; I+ \$ R* x
5 \) N! Q" ]+ m5 L% M; ^% p创建SFTP会话( V- y4 E! t2 g3 I; n3 B, D
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:& B! V$ r; q$ x
9 b6 k. W( U# n% a
sftp = ssh.open_sftp()
5 U1 y! z. [* H1 M9 k6 B( ]- H( x: D# D* u0 @% d9 Y3 x. }
上传文件
& y. Y# S6 X! H, q2 L* f; u* E现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:( ?2 R" e* A5 O* M

! ~& Y7 }) a9 N6 e' F7 j1 Fsftp.put('local_file_path', 'remote_file_path'), f1 D# F3 f* J, K0 c

4 l1 u. [9 A, c下载文件; q9 D6 C# W' s8 M5 d
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:7 A9 n+ u/ F& @4 u: {# b
6 I0 M8 O3 s* l8 ~( V
sftp.get('remote_file_path', 'local_file_path')
, C- p  b$ a8 t
' G) f( j/ N+ H列出文件和目录
2 K6 s2 j* y9 W: W使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
/ W1 d9 X% K7 a1 U) J/ g9 M. u6 X+ `! j
files = sftp.listdir('directory_path')5 T% v) B4 _  B
5 ~; ^* ^' \8 e% C. \6 V* h
删除文件( `! |8 x. v5 E: ]8 @
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:
. M: n& C7 L' R
) C4 S% [8 H0 v% n& Q; q) Asftp.remove('file_path')
+ |* t! q+ ?6 D" r; _" x- g, @2 l8 q+ \" n- t; S
关闭SFTP会话和SSH连接+ ]- f7 S2 `8 v
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:$ K- c5 w6 e0 B3 b/ Y( c

7 B! C5 s+ _) C8 u$ o5 Usftp.close()0 Z( Y( w, x& V$ _& }! d
ssh.close()% q) o" v' J' r9 G5 P! X- @8 y/ y

" X5 r+ S" \2 C! ?完整示例: s3 c$ K, X5 L& J% r1 O* V  m
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:& T( g4 }" h5 x" O% ~3 q" b; r
2 @+ G  B6 }: O% T0 O& n
import paramiko; J- Q2 D* h3 G  n% B
) F5 r& j5 Q( G# W; ~
ssh = paramiko.SSHClient()% \( w+ I9 f, H+ o5 i- |, X  @* j) P* v
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())& q& e+ e! d/ f5 g

7 q$ S- q0 O0 `  i5 c  q8 a7 }! u" mssh.connect('hostname', port=22, username='username', password='password'); f* G1 o% ~) X, x  E' z7 t
: I0 Y* c) ]3 z  J
sftp = ssh.open_sftp(). W4 z$ y% E5 v5 r& W9 V

; n5 @  ^* M& jsftp.put('local_file_path', 'remote_file_path')
  c2 z" t, s; ~. @" lsftp.get('remote_file_path', 'local_file_path')8 s  I7 W+ |: S( `3 r* {

1 H5 o$ s) {0 A; o8 L) t: zfiles = sftp.listdir('directory_path')0 L2 P8 b! M$ ]5 a& e+ {
: J9 O2 w1 y! G; A3 Z4 l. B
sftp.remove('file_path')
' P3 [+ e' t/ h$ }- I) A
  R  l9 v; x0 [$ a$ X2 qsftp.close()1 r( P2 g. t3 b: z/ {8 F4 d# z
ssh.close()
- c1 T% k! L2 X6 K/ m6 N
. j2 X0 ]% S: K+ R- b* c
; E" z' U1 u' y) u* `( G4 V. }; [; f9 C% ]* G% {6 C
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-7-10 06:57 , Processed in 0.415034 second(s), 51 queries .

回顶部