QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2762|回复: 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操作。
' a' V5 y/ M# o7 ^2 N6 g# w5 F. c! M# O
安装paramiko库# @: I% r1 E: T3 c9 a
首先,我们需要安装paramiko库。在命令行中执行以下命令:
' H# K. U) u) X% w& E/ X2 O& O6 u1 b- l: g) w2 ^- y
pip install paramiko
6 C% M$ L: H2 e* |连接到SFTP服务器
1 T8 E$ E9 L) G* s! M8 M接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
2 ]3 c. I+ G: a
# g3 f* j$ k4 @! {import paramiko
' u: B  |% f& ]
& M, ^! ^, {/ a) ]ssh = paramiko.SSHClient()
& h7 d1 D0 f0 w* A
# [  p0 {& ^2 [6 u. B7 _然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
: z; A0 x+ L  ?, b
. H9 O  E0 w0 @8 M5 ~( M+ fssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())8 I) n  H2 a4 H7 Z, l; Q1 A, P

7 s( u$ i* e+ [9 o( s接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
+ q$ u. A/ Y- d$ M* b  `
/ K6 o6 ]) l7 }, M6 tssh.connect('hostname', port=22, username='username', password='password')
+ X5 R3 ~, N9 o/ l; J2 X& ~& V& Z2 L" m1 a/ M& e& m
创建SFTP会话5 `$ W% A; a. Y1 q% j3 a
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:. {& i# ^* _0 y  v% s* U2 i$ a& R
7 f. k4 ^  l# c6 G- ?" n
sftp = ssh.open_sftp()  d* Y7 x! y& }7 f5 q

6 ~2 J2 H4 y% D$ E; h. w上传文件5 `5 J, H) N' Q( ~% X6 b" }
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:, p7 T. C; O4 }

5 r/ W* t' K! N3 M  R. f$ Hsftp.put('local_file_path', 'remote_file_path')
+ W8 a6 R+ e; x! r5 Q4 U  Y% l
( \) I4 K. x4 \下载文件
' U: R" Y* i( z除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
$ X  a9 G; l3 y* O! O, S+ M0 y$ ]7 e/ |$ P/ r$ ~8 r% f- n  Q
sftp.get('remote_file_path', 'local_file_path')
; f1 i  K8 W6 U4 x) @. o+ n% ^, f
列出文件和目录
% B. H  U: V. K  J% ]; z使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
6 M! \- E5 m0 z7 S; n& |# B8 [" {1 O# G& I1 t
files = sftp.listdir('directory_path')* d2 k3 P) {2 F3 z  a
0 w8 K1 c  B1 B' ~3 c9 H
删除文件
8 |. W5 g' y: O) g  j, z使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:7 C# ?6 j+ Z3 u0 G) n: v

) \0 M2 }6 K3 w( ksftp.remove('file_path')
( h% y+ r- S3 r! j
. _9 F4 L) t+ J( H. W/ d. U5 V关闭SFTP会话和SSH连接
$ ~& G" O8 f% M- w完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:
# P! s3 u; @0 z  ?/ d' k" ~* y$ l* p0 k) t3 x! M+ a
sftp.close(); P/ N% ~+ n6 O5 u. D0 P8 E
ssh.close()
( R1 w; x; G, S( \! n! s. ]; |6 {4 f7 I8 p9 l- d! W# {' [
完整示例% A2 [) l+ G# r/ Y* O
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
7 p6 b* H' H% C+ _, T
0 A# c4 F8 H( x3 M* mimport paramiko
6 J! Q! c  X& `  {" y
: |" y- l$ \! Y* H5 W7 H7 F  _ssh = paramiko.SSHClient()
3 p0 N& j* f9 L9 G  e( q5 k7 Essh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
: l& E7 u3 h' R9 v8 D
8 t" Z2 V$ X1 C% Y0 kssh.connect('hostname', port=22, username='username', password='password')- x/ ?* P# k$ K) G# }& n" }
; y9 M6 R5 ?: Q, s1 a+ ~3 [
sftp = ssh.open_sftp()9 F8 Z( C3 R' t6 F& |, Q# k

; j0 F  O: F8 G5 ]! q4 [+ dsftp.put('local_file_path', 'remote_file_path')
3 i/ O" l- V3 |( E2 [1 ?0 x$ ~" ~8 ]sftp.get('remote_file_path', 'local_file_path')
) Q: }% g3 T0 ?- }6 L
4 A5 U% s3 {- ?5 O! e  A2 ~files = sftp.listdir('directory_path')2 O/ m$ X5 Y; e

0 k9 K5 X( F+ i4 y" w: Bsftp.remove('file_path')/ c- l. A' S/ b2 k8 K, T
  Z: z, f; J; z3 Y% X3 g
sftp.close()
5 s5 F: }9 p: t" a( s" q3 t- o- Q" Qssh.close()2 \% M; D# r# F3 u! e. O4 {/ d" z

  n! K! B) s4 H7 Z9 T1 H/ p- ~) e7 F& P* J% F: V7 v/ A2 v9 X
4 A) X4 d2 e! l$ J2 n8 u0 b! y
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-8-5 05:24 , Processed in 0.338758 second(s), 52 queries .

回顶部