QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2680|回复: 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操作。
: ~0 A  _' V  m/ w5 E% a! ?+ M5 W: [; g& ^9 r
安装paramiko库
+ b4 ~- T/ N) d# h首先,我们需要安装paramiko库。在命令行中执行以下命令:4 d: S% i; T6 B

, C# a( N# H* o# Y+ P: J: rpip install paramiko4 r! o8 p4 l5 w2 a% b* ]- ~; v( T
连接到SFTP服务器, f# C  J9 z1 E  ?4 n  S! o! E
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
4 m. J. U1 O; i( q1 e- ^
  u* B1 g8 `8 w! U% U' i4 q3 oimport paramiko
7 Z7 |: [5 @$ B. G( ?# z( Q* W" @8 g! ]& t7 O3 Z2 Q5 a
ssh = paramiko.SSHClient()
) I2 |0 r, }6 @- [) |5 B( n
: v  i, ]4 y6 u! Y. Z# p0 U然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:* W; M! `" j3 o5 w, i8 M5 ^
" ]0 w' G5 |( g+ b- r# E3 u0 |$ R" R5 N
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ Z. r9 I" ~  i) b3 l7 t# F2 `1 ?4 o  p1 j. C5 \4 u- f
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
8 o" u- ?8 M' o' W. U2 Q
" y; p) f& m8 g1 v- Zssh.connect('hostname', port=22, username='username', password='password')
/ J4 ^3 s) G; i% F
+ z+ L3 b, a# d  w. D% t9 o2 W创建SFTP会话
+ n9 e5 z( ^2 E1 x成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:; w: e( ?  {4 a- b0 P: k

, j% {+ S/ L7 z- [; ssftp = ssh.open_sftp()
+ R# p6 S- h. @1 e7 T: ?
7 t! q5 O. h& Z. f5 E5 \上传文件
% I9 d! \! F1 w  ]现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
2 H! D) T# n! Q4 ]2 r6 P! B9 c
9 J; _2 I1 Q  G6 m1 \4 Usftp.put('local_file_path', 'remote_file_path')
3 O% f- `' U! i4 S7 _, e
+ [8 w0 f* s. O0 @下载文件: D* v. z2 H9 ~! f
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
& m$ C5 k: ?, w' y7 B7 Z5 d# ^4 m% @8 r9 Z+ J7 l$ }2 ~: ^3 o9 |
sftp.get('remote_file_path', 'local_file_path')
2 k1 _! E( s' O4 k0 z, W
: ~* S) u/ q; E5 P列出文件和目录0 C; a6 b% v1 o  E
使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
3 `1 S8 ~" t# I5 S0 L5 T
5 [7 X! i# b! L8 yfiles = sftp.listdir('directory_path')
% r4 j! a0 Y$ i  X% [
/ G: n- V* V: d! M删除文件
* G1 N0 U$ O$ i+ Y9 V* l使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:8 l$ a  p& D5 W/ k) j

& d" _, x2 F( a5 s1 v' r" I% Osftp.remove('file_path'): ^' u5 ^, E. t; v
4 Q$ L; G! ?8 R( O. o
关闭SFTP会话和SSH连接
0 t. D& h. ~5 s! B3 L$ R/ g9 B0 H完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:4 R1 q  {4 A9 E: y( f

4 P! d" A! Y5 ]( Lsftp.close()
6 Y" w/ X$ e0 |7 v: issh.close()
  ^, g  X) Q* m% F1 `* {; I8 E9 z9 h7 }- K4 N
完整示例- Y& D/ o; w! o' v+ J1 e/ R
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
( E3 M4 B: _( @4 k8 u5 ^. v6 B9 B1 [1 K0 D4 {& Y4 n
import paramiko
8 G9 Y3 ?  V. @: ?: q% T0 _  ]# Y3 }7 x; M# O- b' H7 @
ssh = paramiko.SSHClient()
2 q# d8 o. Y1 C- b; z5 zssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
/ c; ?3 e0 Y# ?! r- m- d& v
2 y, x7 J4 z. n1 i# T' ~7 sssh.connect('hostname', port=22, username='username', password='password')( X" C+ p3 d. ^6 V, }3 i1 o
' x  C( v' H* T8 c1 G' i
sftp = ssh.open_sftp()
. ?% M0 D- f& X5 v
+ d( K! h0 T) b  k: J' k7 a' w. Gsftp.put('local_file_path', 'remote_file_path')/ v  ^, ^# P0 C+ |7 E$ U
sftp.get('remote_file_path', 'local_file_path')
# ~) W( }  ?" R: G+ E7 j
$ E0 c; c  Y7 }0 N3 q8 d$ Xfiles = sftp.listdir('directory_path')# `8 t6 p, n$ z: s9 G4 A# x  t, Q

' x# ]4 s4 T5 P; wsftp.remove('file_path')  p3 Y9 G7 h1 W6 T0 ?8 S5 e$ b
% \' |7 [; b  r/ c) c3 a' @
sftp.close()4 L* z/ \% y' C  m: y+ u  ?4 E. a
ssh.close()
8 w& y. h5 N# {8 g. s4 g5 K5 `% N$ S+ B

) u& _8 T/ z4 \& `) \- h+ ^2 _: `
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-12 04:49 , Processed in 0.345690 second(s), 51 queries .

回顶部